2013-05-31 12 views
5

Also habe ich diese Frage. Warum cout nicht wirftC++ Cout gibt undeclared Kennung

error C2065: 'cout' : undeclared identifier 

ich Visual Studio 2012 als IDE verwende, und ich bin ein Schulprojekt zu schreiben. Ich habe alles außer einer Beispieldatei erledigt. So versuche ich, etwas auf dem Bildschirm wie folgt zu schreiben:

#include "iostream" 
#include "stdafx.h" 
using namespace std; 

int main() 
{ 
    cout<<"example"; 

    return 0; 
} 

so das Problem mit cout ist ... printf funktioniert gut, aber ich möchte cout verwenden.

EDIT: Ich habe geändert "" zu <> aber es hilft nicht. Auch verwende ich diesen Code nur zum Beispiel ... Das ist nicht das ganze Projekt.

+0

Try '# include ' –

+0

Und verwenden Sie 'std :: cout' oder den Namespace verwenden. – Dirk

+4

Ich glaube, der vorkompilierte Header muss die erste Zeile in der Quelle sein. – chris

Antwort

12

stdafx.h soll die erste Include-Anweisung in Ihrer Quelldatei sein.

Dateien umschalten und das zweite Include in <> konvertieren, wie andere vorgeschlagen.

#include "stdafx.h" 
#include <iostream> 

Siehe this post für weitere Informationen.

+1

thx, ich habe das gerade herausgefunden, aber Sie sind der Einzige mit der tatsächlichen Lösung: D: D – Dekay

+0

@ user2440586, Um fair zu sein, ist es * viel besser, Winkelklammern zu verwenden, wenn Standard-Header enthalten. – chris

11

Zu allererst:

#include <iostream> 

statt #include "iostream"

Zweitens ist es in der Regel schlechte Praxis betrachtet using namespace std; zu schreiben, obwohl die meisten Kurse damit anfangen. Es ist besser, nur zu verwenden, was Sie wirklich brauchen, in Ihrem Fall:

using std::cout;

+2

Es besteht keine Notwendigkeit von "Second". Er verwendet bereits "using namespace std;" – Tik0

+2

oops, meine schlechte ... entfernt, dass –

+0

Die Frage ist, warum es fehlschlägt, wenn "" sucht wie <> wenn es fehlschlägt. – chris

4
#include "iostream" 

sollte von diesem Posten Zitiert

#include <iostream> 

sein: difference-between-iostream-and-iostream-quotes-in-include

Mit freundlicher Genehmigung von @ Jerry Coffins Antwort:

Wenn Sie <> verwenden, sucht der Compiler nur in den vom System festgelegten Verzeichnissen/Verzeichnissen (z. B. was immer Sie in der Umgebungsvariablen include festgelegt haben) für den Header.

Wenn Sie "" verwenden, sucht der Compiler zuerst im lokalen Verzeichnis, und wenn das fehlschlägt, wird erneut gesucht, so wie Sie <> verwendet haben. Technisch (d. H. Gemäß dem Standard) muss dies nicht das "lokale" Verzeichnis sein, aber so funktioniert es im Wesentlichen bei jedem mir bekannten Compiler.

EDIT:

jedoch die Ursache ist, dass stdafx.h eine vorkompilierte Kopf ist. Visual C++ wird nichts vor dem #include "stdafx.h" in der Quelldatei kompilieren, außer die Kompilieroption /Yu'stdafx.h' ist deaktiviert (standardmäßig); Es wird angenommen, dass der gesamte Code in der Quelle bis einschließlich dieser Zeile bereits kompiliert wurde. Es ist jedoch immer noch besser, <> mit iostream zu verwenden, um den Leser des Codes nicht zu verwirren.

+1

Das Problem, das ich sehe, ist, dass Sie Ihrer Antwort mit dem Zitat widersprechen. Mein Geld ist auf dem PCH-Problem. – chris

+0

@chris Ich denke, der letzte Satz 'aber so funktioniert es bei praktisch jedem Compiler, von dem ich weiß ', dass Zitat seine Antwort konsolidiert. Fühlen Sie sich frei, mich zu korrigieren, wenn das einschließende Zitat nicht richtig ist, danke! – taocp

+0

Ich glaube, er bezieht sich auf die Tatsache, dass '#include" name "' in einer implementierungsdefinierten Weise sucht, bevor es auf '#include ' zurückfällt, aber jeder vernünftige Compiler sieht im lokalen Verzeichnis nach. – chris

1

Wenn Sie #include <iostream> mit der <> anstelle von "" verwenden, sollte es funktionieren. Im Moment weiß der Compiler nicht, wo er die Iostream-Bibliothek finden kann.

Möglicherweise möchten Sie auch cout<<"example"; in cout<<"example"<<endl; für eine neue Zeile ändern, damit es richtig formatiert.

+2

Wenn Sie nur raten, eine neue Zeile hinzuzufügen, raten Sie einfach, eine neue Zeile hinzuzufügen: '<< '\ n';'. Wenn Sie darauf hinweisen, auch zu spülen, sollten Sie dies deutlich herausstellen. – BoBTFish