2012-06-08 15 views
50

puedo obtener estos mensajes de error para todos cout y endl:¿Por qué std :: cout en lugar de simplemente cout?

main.cc:17:5: error: ‘cout’ was not declared in this scope 
main.cc:17:5: note: suggested alternative: 
/usr/include/c++/4.6/iostream:62:18: note: ‘std::cout’ 

Después de seguir la sugerencia, todo está bien. Ahora tengo curiosidad, por qué tuve que hacer eso. Antes usábamos C++ en clases, pero nunca tuve que escribir un std:: antes de ninguno de esos comandos. ¿Qué podría ser diferente en este sistema?

+1

tienes que decir que estás usando std para saber qué es cout. si haces esto como importación, simplemente puedes decir cout; de lo contrario, tienes que justificarlo completamente para decirle al compilador cuál es la información actual. – pengibot

+35

Enhorabuena, eres la 1000000va víctima del estúpido hábito de importar el espacio de nombres 'std' que cada uno El curso introductorio a C++ que he visto parece adoptar ... –

+1

Lo siento Luc, que la codificación en el lenguaje no se limita al pequeño grupo de personas que escuchaban cursos introductorios sobre ese idioma. – erikbwork

Respuesta

102

Parece posible que su clase haya estado utilizando C++ pre-estándar. Una manera fácil de decir, es mirar los programas antiguos y comprobar, lo que ves:

#include <iostream.h> 

o

#include <iostream> 

El primero es pre-estándar, y usted será capaz de simplemente Diga cout en comparación con std::cout sin nada adicional. Usted puede obtener el mismo comportamiento en C++ estándar mediante la adición de

using std::cout; 

o

using namespace std; 

Sólo una idea, de todos modos.

+1

¡La respuesta más completa y legible! ¡Incluso tuve el problema ! – erikbwork

+2

No use 'using namespace std;', p. vea http://stackoverflow.com/questions/1452721/why-is-using-namespace-std-considered-bad-practice –

12

Todo en la Biblioteca de plantillas estándar/Iostream reside en el espacio de nombres estándar. Probablemente haya usado:

using namespace std; 

En sus clases, y por eso funcionó.

+13

Aunque 'cout' no es parte de la STL ... –

+0

@OliCharlesworth solucionó: D. – mfontanini

24

En el estándar C++, cout se define en el espacio de nombres std, por lo que necesita ya sea decir std::cout o poner

using namespace std; 

en el código con el fin de llegar a ella.

Sin embargo, este no siempre fue el caso, y en el pasado cout estaba justo en el espacio de nombres global (o, más tarde, en global y std). Por lo tanto, concluiría que sus clases utilizaron un compilador C++ anterior.

2

Probablemente tengas using namespace std; antes en tu código que hiciste en clase. Eso le dice explícitamente al precompilador que busque los símbolos en std, lo que significa que no necesita std::. Aunque es una buena práctica para std::cout en lugar de cout, de manera explícita, invoque std::cout cada vez. De esta forma, si está utilizando otra biblioteca que redefine cout, aún tiene el comportamiento std::cout en lugar de otro comportamiento personalizado.

2

"std" es un espacio de nombres utilizado para STL (biblioteca de plantillas estándar). Consulte http://en.wikipedia.org/wiki/Namespace_(computer_science)#C.2B.2B

Puede escribir "use namespace std;" antes de usar cualquier función stl, variables o simplemente insertar "std ::" antes que ellos.

+0

pedante, tal vez: en realidad, los elementos de la biblioteca estándar de C++, no solo el STL, están en el espacio de nombres 'std'. Referencia C++ 03: 17.4.1.1/2: "Todas las entidades de la biblioteca [C++ Standard] excepto las macros, el operador nuevo y el operador delete se definen dentro del espacio de nombres o espacios de nombres anidados en el espacio de nombres std." –

-2

si están trabajando en la raíz, que ni siquiera tiene que escribir y #include using namespace std; simplemente comience desde int nombre de archivo(). , solo intentalo.

+0

Esto no proporciona una respuesta a la pregunta. Una vez que tenga suficiente [reputación] (https://stackoverflow.com/help/whats-reputation) podrá [comentar cualquier publicación] (https://stackoverflow.com/help/privileges/comment); en su lugar, [brinde respuestas que no requieran aclaración del autor de la pregunta] (https://meta.stackexchange.com/questions/214173/why-do-i-need-50-reputation-to-comment-what-can- i-do-instead). - [De la crítica] (/ review/low-quality-posts/17069531) –