2012-06-08 1 views
50

Ich erhalte diese Fehlermeldungen für alle cout und endl:Warum std :: cout statt einfach 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’ 

Nach dem Vorschlag folgen, alles ist in Ordnung. Jetzt bin ich neugierig, warum ich das machen musste. Wir haben früher C++ in Klassen verwendet, aber ich musste nie einen std:: vor einem dieser Befehle schreiben. Was könnte auf diesem System anders sein?

+1

müssen Sie sagen, dass Sie Std verwenden, um zu wissen, was cout ist. Wenn Sie dies als Import tun, können Sie einfach sagen, cout, sonst müssen Sie es vollständig zu rechtfertigen, um den Compiler zu sagen, was Cout actuallt – pengibot

+35

Herzlichen Glückwunsch, Sie sind das 1000000. Opfer der dummen Gewohnheit des Importierens der 'std' Namespace, dass jeder einzelne Einführungskurs nach C++, den ich je gesehen habe scheint zu übernehmen ... –

+1

Tut mir leid, Luc, dass Codierung in der Sprache ist nicht begrenzt die kleine Gruppe von Menschen, die Einführungen zu dieser Sprache zu hören waren. – erikbwork

Antwort

102

Es scheint möglich, dass Ihre Klasse C++ vor dem Standard verwendet hat. Eine einfache Möglichkeit, zu sagen, ist Ihre alten Programme zu suchen und überprüfen, sehen Sie sehen:

#include <iostream.h> 

oder

#include <iostream> 

Ersteres ist Vornorm, und Sie werden in der Lage sein, nur sagen cout im Gegensatz zu std::cout ohne etwas Zusätzliches. Sie können das gleiche Verhalten in Standard C++ erhalten durch

using std::cout; 

oder

Zugabe
using namespace std; 

Nur eine Idee, sowieso.

+1

Die vollständigste und verständlichste Antwort! Ich hatte sogar das Problem! – erikbwork

+2

Bitte verwenden Sie 'using namespace std;', z. Siehe http://stackoverflow.com/questions/1452721/why-isusing-namespace-std-considered-bad-practice –

12

Alles in der Standardvorlage/Iostream Library befindet sich im Namespace std. Sie haben wahrscheinlich verwendet:

using namespace std; 

In Ihren Klassen, und deshalb hat es funktioniert.

+13

Obwohl 'cout' nicht Teil der STL ist ... –

+0

@OliCharlesworth behoben: D. – mfontanini

24

In dem C++ Standard wird cout im std Namensraum definiert, so müssen Sie entweder std::cout sagen oder

using namespace std; 

in Ihrem Code, um es zu bekommen zu setzen.

Dies war jedoch nicht immer der Fall, und in der Vergangenheit cout war nur im globalen Namespace (oder später in beiden globalen und std). Ich würde daher feststellen, dass Ihre Klassen einen älteren C++ - Compiler verwendet haben.

2

Sie hatten wahrscheinlich using namespace std; vorher in Ihrem Code, den Sie in Klasse getan haben. Das weist den Precompiler explizit an, nach den Symbolen in std zu suchen, was bedeutet, dass Sie std:: nicht benötigen. Es ist jedoch eine gute Praxis, std::cout anstelle von cout, so dass Sie jedes Mal std::cout explizit aufrufen. Auf diese Weise haben Sie, wenn Sie eine andere Bibliothek verwenden, die cout neu definiert, immer noch das Verhalten std::cout anstelle eines anderen benutzerdefinierten Verhaltens.

2

"std" ist ein Namespace für STL (Standard Template Library). Bitte beziehen Sie sich auf http://en.wikipedia.org/wiki/Namespace_(computer_science)#C.2B.2B

Sie können entweder schreiben "Use Namespace Std;" bevor Sie irgendwelche stl-Funktionen, Variablen oder einfach nur "std ::" vor ihnen verwenden.

+0

Pedantic, vielleicht: Es ist tatsächlich die C++ - Standardbibliothek Elemente, nicht nur die STL, die im Namespace sind 'std'. Referenz C++ 03: 17.4.1.1/2: "Alle [C++ Standard] Bibliothekseinheiten außer Makros, Operator new und Operator delete werden innerhalb des Namespace stdoder in Namespacestd geschachtelte Namespaces definiert." –

-2

wenn arbeiten in ROOT, Sie müssen nicht einmal schreiben #include und mit Namensraum verletzen verwenden könnte std; einfach von int Dateiname() starten. versuchen Sie es einfach.

+0

Dies liefert keine Antwort auf die Frage. Sobald Sie genug [Reputation] (https://stackoverflow.com/help/whats-reputation) haben, können Sie [jeden Beitrag kommentieren] (https://stackoverflow.com/help/privileges/comment); Stattdessen [geben Sie Antworten, die keine Klärung durch den Fragesteller erfordern] (https://meta.stackexchange.com/questions/214173/why-doe-i-need-50-reputation-to-comment-what-can- i-do-stattdessen). - [Aus Bewertung] (/ review/low-quality-posts/17069531) –