2012-03-29 15 views
12

Uczyłem się książki Adama Drozdka "Struktury danych i algorytmy w C++", cóż, wpisałem kod na stronie 15 w moim vimie i skompilowałem go na terminalu mojego Ubuntu 11.10.'cout' nie wymienia typu

#include <iostream> 
#include <cstring> 
using namespace std; 

struct Node{ 
    char *name; 
    int age; 
    Node(char *n = "", int a = 0){ 
     name = new char[strlen(n) + 1]; 
     strcpy(name, n); 
     age = a; 
    } 
}; 

Node node1("Roger", 20), node2(node1); 
cout << node1.name << ' ' << node1.age << ' ' << node2.name << ' ' << node2.age; 
strcpy(node2.name, "Wendy"); 
node2.name = 30; 
cout << node1.name << ' ' << node1.age << ' ' << node2.name << ' ' << node2.age; 

Ale jest jakiś błąd:

[email protected]:~$ g++ unproper.cpp -o unproper 
unproper.cpp:15:23: warning: deprecated conversion from string constant to ‘char*’ [-Wwrite-strings] 
unproper.cpp:16:1: error: ‘cout’ does not name a type 
unproper.cpp:17:7: error: expected constructor, destructor, or type conversion before ‘(’ token 
unproper.cpp:18:1: error: ‘node2’ does not name a type 
unproper.cpp:19:1: error: ‘cout’ does not name a type 

Przeszukałem this, this, this i this, ale nie mogę znaleźć odpowiedzi.

Każda pomoc będzie mile widziane :)

+5

Gdzie jest 'main()'? – Makoto

+1

Tęsknisz za swoją główną. Kod znajduje się poza funkcją i jest uznawany przez kompilator za deklarację zmiennych, klas, struktur lub innych takich poleceń. Po prostu umieść cały dolny kod w int main() –

Odpowiedz

23

Problem polega na tym, że kod trzeba, że ​​robi to druk jest poza jakąkolwiek funkcją. Oświadczenia w C++ muszą znajdować się wewnątrz funkcji. Na przykład:

#include <iostream> 
#include <cstring> 
using namespace std; 

struct Node{ 
    char *name; 
    int age; 
    Node(char *n = "", int a = 0){ 
     name = new char[strlen(n) + 1]; 
     strcpy(name, n); 
     age = a; 
    } 
}; 


int main() { 
    Node node1("Roger", 20), node2(node1); 
    cout << node1.name << ' ' << node1.age << ' ' << node2.name << ' ' << node2.age; 
    strcpy(node2.name, "Wendy"); 
    node2.name = 30; 
    cout << node1.name << ' ' << node1.age << ' ' << node2.name << ' ' << node2.age; 
} 
5

Brakuje deklaracji funkcji wokół kodu programu. Poniższa powinno rozwiązać błąd:

#include <iostream> 
#include <cstring> 
using namespace std; 

struct Node{ 
    char *name; 
    int age; 
    Node(char *n = "", int a = 0){ 
     name = new char[strlen(n) + 1]; 
     strcpy(name, n); 
     age = a; 
    } 
}; 

int main() 
{ 
    Node node1("Roger", 20), node2(node1); 
    cout << node1.name << ' ' << node1.age << ' ' << node2.name << ' ' << node2.age; 
    strcpy(node2.name, "Wendy"); 
    node2.name = 30; 
    cout << node1.name << ' ' << node1.age << ' ' << node2.name << ' ' << node2.age; 
} 

błąd następnie dostać (coś jak „Nieprawidłowy konwersji z int na char *”), dlatego, że starają się ustawić wartość całkowitą (30) do atrybutu String (nazwa) z

node2.name=30; 

myślę

node2.age=30; 

byłoby poprawne.

2

main() funkcja jest pominięta. W C++ powinna istnieć funkcja main(), a do funkcji należy wstawić cout.

1

Jeśli chcesz użyć cout poza funkcją można to zrobić poprzez zbieranie wartość zwracana przez cout w boolean.see poniższym przykładzie

#include<iostream> 
using namespace std; 

bool b=cout<<"1"; 

int main() 
{ 

return 0; 

} 

wyjściowa:

error prog.cpp:4:14: error: cannot convert 'std::basic_ostream<char>' to 'bool' in initialization 
bool b=cout<<"1"; 
-1

Łącznie:

int main() 
{ //code 
    return 0; 
} 

pomoże. Ten problem występuje zwykle u osób, które uczą się z książki, w której zazwyczaj nie używają głównej funkcji po kilku rozdziałach.

Powiązane problemy