2012-03-29 35 views
12

Estaba aprendiendo el libro de Adam Drozdek "Estructuras de datos y algoritmos en C++", bueno, escribí el código en la página 15 en mi vim y lo compilé en la terminal de mi Ubuntu 11.10.'cout' no nombra un tipo

#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; 

Pero hay algún error:

[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 

He buscado this, this, this y this, pero no puedo encontrar la respuesta.

Cualquier ayuda se agradece :)

+5

¿Dónde está 'main()'? – Makoto

+1

Te estás perdiendo tu principal. El código está fuera de una función y el compilador lo considera una declaración de variables, clase, estructuras u otros comandos similares. Simplemente ponga todo el código inferior en int main() –

Respuesta

23

El problema es que el código que tiene que hace la impresión está fuera de cualquier función. Las declaraciones en C++ deben estar dentro de una función. Por ejemplo:

#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

Se ha perdido la declaración de función alrededor del código del programa. Lo siguiente debe resolver su error:

#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; 
} 

El error que se obtiene (algo así como "conversión inválida de int a char *") es porque se intenta establecer un valor entero (30) a un atributo de cadena (nombre) con

node2.name=30; 

Creo

node2.age=30; 

sería correcto.

2

main() se ha perdido la función. Debe haber una función main() en C++, y debe poner cout en una función.

1

Si desea utilizar cout fuera de la función que puede hacerlo recogiendo el valor devuelto por cout en boolean.see el siguiente ejemplo

#include<iostream> 
using namespace std; 

bool b=cout<<"1"; 

int main() 
{ 

return 0; 

} 

de salida:

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

Incluye:

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

te ayudarán. Este problema generalmente ocurre a aquellos que están aprendiendo de un libro en el que generalmente no usan la función principal después de unos pocos capítulos.