Fehler C2065: 'cout': nicht deklarierter Bezeichner

72

Ich arbeite am 'Treiber'-Teil meiner Programmieraufgabe und bekomme immer wieder diesen absurden Fehler:

Fehler C2065: 'cout': nicht deklarierter Bezeichner

Ich habe sogar versucht, std :: cout zu verwenden, aber ich erhalte einen weiteren Fehler, der besagt: IntelliSense: Der Namespace "std" hat kein Mitglied "cout", wenn ich die Verwendung des Namespace std angegeben habe, einschließlich iostream + Ich habe sogar versucht, ostream zu verwenden

Ich weiß, dass es eine Standard-Noob-Frage ist, aber das hat mich verblüfft und ich bin ein Neuling (was bedeutet: Ich habe schon einmal programmiert ...)

#include <iostream>
using namespace std;

int main () {
    cout << "hey" << endl;
 return 0;
}

Ich verwende Visual Studio 2010 und verwende Windows 7. Alle .h-Dateien haben "using namespace std" und enthalten iostream und ostream.

Wallter
quelle
2
Entfernen Sie alle Header-Dateien außer iostream und versuchen Sie es erneut.
Timo Geusch
2
Sollte dein << Ende nicht endl sein?
RC.
7
"HINWEIS: Alle .h-Dateien enthalten den Namespace std - und enthalten Io- und O-Streams ..." <- Wenn Sie meinen, dass alle .h-Dateien "using namespace std;" in ihnen möchten Sie vielleicht noch einmal überdenken ...
Zahnrad
3
int mainnicht int Main. Ein Semikolon nach einem Funktionskörper ist nicht erforderlich.
Cat Plus Plus
13
Ich bezweifle ernsthaft, dass Visual Studio einen Fehler in Bezug auf Cout hat.
GManNickG

Antworten:

65

In Visual Studio müssen #include "stdafx.h"und müssen Sie das erste Include der CPP-Datei sein. Zum Beispiel:

Diese werden nicht funktionieren.

#include <iostream>
using namespace std;
int main () {
    cout << "hey" << endl;
    return 0;
}




#include <iostream>
#include "stdafx.h"
using namespace std;
int main () {
    cout << "hey" << endl;
    return 0;
}

Das wird es tun.

#include "stdafx.h"
#include <iostream>
using namespace std;
int main () {
    cout << "hey" << endl;
    return 0;
}

Hier ist eine großartige Antwort darauf, was der Header stdafx.h tut.

George Chondrompilas
quelle
3
Dies sollte die richtige Antwort sein, da sie angibt, warum der Code funktioniert. Vielen Dank.
Eliud
1
Ja, dies sollte die akzeptierte Antwort sein. Die meisten anderen funktionieren auch, aber das zeigt es sehr deutlich. @ Wallter
Konstantin A. Magg
1
Ich habe gerade mitgesungen, um eine Stimme abzugeben. Dies ist die Antwort, klar ausgedrückt.
Samir
Außer dass niemand erwähnt, was stdafx.htut.
Uitty400
48

Schreiben Sie diesen Code, es funktioniert perfekt ..

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

using namespace std;

int main()
{
 cout<<"Hello World!";
  return 0;
}
Hrishikesh Choudhari
quelle
11

Ich hatte das gleiche Problem in Visual Studio C ++ 2010. Es ist einfach zu beheben. Über der Funktion main () ersetzen Sie einfach die Standard-Include-Zeilen durch die folgenden, jedoch mit dem Pfund-Symbol vor den Includes.

# include "stdafx.h"
# include <iostream>
using  namespace std;
mee
quelle
10

Das include "stdafx.h"ist ok

Sie können es jedoch nur verwenden, coutwenn Sie es hinzugefügt habenusing namespace std

Wenn Sie den Namespace std nicht angegeben haben, müssen Sie std::coutstatt einfach schreibencout

Yu Hao
quelle
Dies ist die richtige Antwort. Sie müssen "using namespace std" verwenden, wo sich cout befindet. In modernem C ++ befinden sich alle Funktionen in einem eigenen Namespace.
Hammad Khan
4

Ich habe das gesehen, wenn Sie verwenden

#include <iostream.h>

dann wirst du das Problem bekommen.

Wenn du benutzt

#include <iostream>  

(Hinweis - ohne die .h)

dann werden Sie das erwähnte Problem nicht bekommen.

GB
quelle
Ich habe gesehen, dass wenn Sie #include <iostream.h> verwenden, Sie das Problem erhalten. Wenn Sie #include <iostream> verwenden (Hinweis - ohne das .h), erhalten Sie das von Ihnen erwähnte Problem nicht.
GB
aber warum ist es so wichtig, include ohne ".h" zu verwenden?
JavaRunner
1
@ JavaRunner: Weil die Datei benannt ist iostream. Es ist nicht benannt iostream.h. iostream.hist nicht vorhanden. So einfach ist das.
Leichtigkeitsrennen im Orbit
4

Wenn Sie ein Projekt gestartet haben, für das die #include "stdafx.h"Zeile erforderlich ist, setzen Sie es an die erste Stelle.

Jerrey
quelle
3

Der folgende Code wird mit gcc kompiliert und ordnungsgemäß für mich ausgeführt. Versuchen Sie dies zu kopieren / einzufügen und prüfen Sie, ob es funktioniert.

#include <iostream>
using namespace std;

int bob (int a) { cout << "hey" << endl; return 0; };

int main () {
    int a = 1;
    bob(a);
    return 0;
}
Tal
quelle
Ja, das Gleiche - Fehler 1 Fehler C2065: 'cout': nicht deklarierter Bezeichner && IntelliSense: Bezeichner "cout" ist undefiniert
Wallter
Funktioniert std :: cout? Ich weiß nicht viel über Visual Studio. Sind Sie sicher, dass Sie das Projekt korrekt als C ++ - Projekt eingerichtet haben? Wenn Sie die Datei iostream öffnen, enthält sie eine cout-Deklaration?
Glen
Da VS2010 noch Beta-Version ist, könnte es sich um einen Fehler handeln (welche Beta-Version verwenden Sie?). Aber es fällt mir schwer zu glauben, dass etwas so Grundlegendes nicht richtig funktioniert.
Glen
auf Ubuntu C ++ Projekt; Hinzufügen dieses "using namespace std;" Nach dem "#include <iostream>" haben die Arbeiten - danke
Serup
3

Wenn die einzige Datei, die Sie einschließen, iostream ist und immer noch undefiniert steht, enthält iostream möglicherweise nicht das, was es soll. Ist es möglich, dass Sie eine leere Datei mit dem zufälligen Namen "iostream" in Ihrem Projekt haben?

Bob Lied
quelle
3

Ich habe ähnliche Dinge gesehen, als ich die Dateierweiterung .c mit C ++ - Code verwendet habe. Ansonsten müsste ich allen in Bezug auf eine fehlerhafte Installation zustimmen. Funktioniert es, wenn Sie versuchen, das Projekt mit einer früheren Version von VS zu kompilieren? Versuchen Sie VC ++ Express 2008. Es ist kostenlos auf msdn.

Ziegenlinks
quelle
Ja, es war der VS2010 - ich habe Eclipse Galileo installiert und das Programm lief einwandfrei !!!
Wallter
3

Eine so dumme Lösung in meinem Fall:

// Example a
#include <iostream>    
#include "stdafx.h"

Das obige wurde gemäß Beispiel a bestellt, als ich es so änderte, dass es Beispiel b unten ähnelt ...

// Example b
#include "stdafx.h"
#include <iostream>  

Mein Code wurde wie ein Zauber kompiliert. Probieren Sie es aus, garantiert funktioniert es.

Sizons
quelle
2

Ich habe VS2010, Beta 1 und Beta 2 (eine auf meiner Arbeitsmaschine und eine zu Hause) und ich habe stdviel ohne Probleme verwendet. Versuchen Sie Folgendes zu tippen:

std::

Und sehen Sie, ob Intellisense Ihnen etwas gibt. Wenn es Ihnen die üblichen Sachen gibt ( abort, abs, acos, etc.), mit Ausnahmecout , auch dann, dass durchaus ein Puzzler ist. Schauen Sie sich in diesem Fall unbedingt Ihre C ++ - Header an.

Darüber hinaus möchte ich nur hinzufügen, dass Sie ein reguläres, leeres Projekt ausführen (nicht CLR, bei dem Intellisense verkrüppelt ist) und dass Sie tatsächlich mindestens einmal versucht haben , das Projekt zu erstellen . Wie bereits in einem Kommentar erwähnt, analysiert VS2010 Dateien, sobald Sie eine hinzugefügt haben include. es könnte sein, dass etwas am Parser klebte und es nicht coutsofort "fand" . (In welchem ​​Fall versuchen Sie vielleicht, VS neu zu starten?)

Dan Tao
quelle
Nein, es gibt kein cout, endl, cerr in std :: (in Fertigstellung)
Gänseblümchen
2

Nimm den Code

#include <iostream>
using namespace std;

Erstellen Sie aus Ihrer CPP-Datei eine Header-Datei und fügen Sie diese in die H-Datei ein. Dann füge hinzu

#include "whatever your header file is named.h"

oben in Ihrem CPP-Code. Führen Sie es dann erneut aus.

Jameyson
quelle
2

Ich hatte das gleiche Problem beim Starten eines ms c ++ 2010-Projekts von Grund auf neu - ich habe alle von ms generierten Header-Dateien entfernt und verwendet:

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

int main() {
   cout << "hey" << endl;
   return 0;
}

Ich musste einschließen, stdafx.hda es einen Fehler verursachte, der es nicht hatte.

oly
quelle
2

Bevor Sie mit diesem Programm beginnen, entfernen Sie den gesamten Code und erstellen Sie eine einfache Hallo-Welt innerhalb von main. Schließen Sie nur iostream ein und verwenden Sie den Namespace std;. Fügen Sie nach und nach etwas hinzu, um Ihr Problem zu finden.

cout << "hi" << endl;
JonH
quelle
Ich habe es gerade getan, aber nichts hat sich geändert
Wallter
Ok, mach was alle anderen gesagt haben. Befreien Sie sich von Ihrem gesamten Code. Behalten Sie einfach den using-Namespace und den Header-iostream bei. dann füge dies ein in: int main (void) {std :: cout << "Hallo Welt!" << std :: endl; return 0; } Sag uns, ob das funktioniert.
JonH
1
Wenn eine Datei nicht mit nur kompiliert werden #include <iostream> int main() { std::cout << "ok"; }kann, ist in Ihrer C ++ - Implementierung ein Fehler aufgetreten. Welchen Compiler verwenden Sie?
Pavel Minaev
Auch ist es Haupt nicht Haupt. Groß- und Kleinschreibung ist in C ++ wichtig. Ich schlage vor, Sie googeln C ++ Hallo Welt.
JonH
Befreien Sie sich von diesem Semikolon nach der Funktion Bob. Es kommt vor main, so dass Sie es nicht brauchen.
JonH
1

Sind Sie sicher, dass es als C ++ kompiliert wird? Überprüfen Sie Ihren Dateinamen (er sollte auf enden .cpp). Überprüfen Sie Ihre Projekteinstellungen.

Es ist einfach nichts falsch mit Ihrem Programm und coutist innamespace std . Ihre Installation von VS 2010 Beta 2 ist fehlerhaft, und ich glaube nicht, dass es nur Ihre Installation ist.

Ich denke, VS 2010 ist noch nicht für C ++ bereit. Das Standardprogramm "Hello, World" funktionierte in Beta 1 nicht. Ich habe gerade versucht, eine Test-Win32-Konsolenanwendung zu erstellen, und die generierte test.cppDatei hatte keine main()Funktion.

Ich habe ein sehr, sehr schlechtes Gefühl bei VS 2010.

David Thornley
quelle
2
Angesichts der Tatsache, dass VS2010 mit sich selbst geschrieben wurde (und mit dem VC10-Compiler kompiliert wurde und der Code neue C ++ 0x-Funktionen wie Lambdas usw. verwendet), kann ich Ihnen versichern, dass es für C ++ durchaus bereit ist. Wenn Sie Probleme mit "Hello, world" -Anwendungen haben, klingt dies wie eine fehlerhafte Installation (was wahrscheinlich ein Fehler ist) oder ein Fehler nach der Installation. In beiden Fällen ist es nicht normal und es ist definitiv keine normale Erfahrung in Beta 1 oder Beta 2. Bitte melden Sie es als Fehler in Connect.
Pavel Minaev
@ Pavel: Danke; Wie Sie sehen, habe ich es nicht zum Laufen gebracht. Irgendwann nach dieser aktuellen Krise werde ich versuchen, einige Fehlerberichte zu bekommen.
David Thornley
1

Probieren Sie es aus, es wird funktionieren. Ich habe es in Windows XP, Visual Studio 2010 Express überprüft.

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

void main( ) 
{
   int i = 0;
   cout << "Enter a number: ";
   cin >> i;
}
Abdullah Muhammad
quelle
mainkehrt zurück int. Immer.
Leichtigkeitsrennen im Orbit
1

Bei der Erstellung Ihres Projekts haben Sie "Vorkompilierte Header verwenden" nicht richtig eingestellt. Ändern Sie es in Eigenschaften-> C / C ++ -> vorkompilierte Header.

John Ktejik
quelle
1

Verwenden Sie in Visual Studio Ihren gesamten Header-Filer unter "stdafx.h".

Nithin
quelle
1

Fügen Sie die Standardbibliothek ein, indem Sie die folgende Zeile oben in Ihren Code einfügen:

using namespace std;
cahit beyaz
quelle
0

wird normalerweise im Ordner C: \ Programme \ Microsoft Visual Studio 8 \ VC \ include gespeichert. Überprüfen Sie zuerst, ob es noch da ist. Wählen Sie dann Extras + Optionen, Projekte und Lösungen, VC ++ - Verzeichnisse, wählen Sie "Dateien einschließen" in der Combobox "Verzeichnisse anzeigen für" und überprüfen Sie, ob $ (VCInstallDir) include ganz oben auf der Liste steht.

Manohar
quelle
0

Ich bin auf diesen Fehler gestoßen, nachdem ich gerade gegen 2010 installiert und versucht hatte, ein nahezu identisches Programm zum Laufen zu bringen.

Ich habe schon einmal Vanilla C-Codierung auf Unix-Boxen durchgeführt und beschlossen, selbst ein bisschen damit zu spielen.

Das erste Programm, das ich ausprobierte, war:

#include "stdafx.h"


int _tmain(int argc, _TCHAR* argv[])
{
    cout << "Hello World!";
    return 0;
}

Die große Sache, die Sie hier beachten sollten ... wenn Sie jemals eine C-Codierung durchgeführt haben,

int _tmain(int argc, _TCHAR* argv[])

Sieht komisch aus. es sollte sein:

int main( int argc, char ** argv )

In meinem Fall habe ich gerade das Programm geändert in:

#include <iostream>
using namespace std;

int main()
{
     cout << "Hello world from  VS 2010!\n";
     return 0;
}

Und es hat gut funktioniert.

Hinweis: Verwenden Sie STRG + F5, damit das Konsolenfenster angezeigt wird und Sie die Ergebnisse sehen können.

avgvstvs
quelle
0

Einfach benutzen printf!

Fügen Sie stdio.hin Ihrer stdafx.hHeader - Datei für printf.

Ngoo Nam
quelle
0

Ich bin hierher gekommen, weil ich das gleiche Problem hatte, aber als ich es tat #include "stdafx.h", sagte es, dass es diese Datei nicht gefunden hat.
Was war der Trick für mich war : #include <algorithm>.
Ich verwende Microsoft Visual Studio 2008.
Dies sind die Dinge, die Sie dann verwenden können, inkl. 'count': Link

Tenzin
quelle
0

In VS2017, stdafx.hscheint wie folgt zu ersetzen pch.hsiehe diesen Artikel ,

Verwenden Sie also:

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

using namespace std;

int main() {
    cout << "Enter 2 numbers:" << endl;
Yu Yang Jian
quelle
-5

Es war der Compiler - ich verwende jetzt Eclipse Galileo und das Programm funktioniert wie ein Wunder


Wallter
quelle
Es war der Compiler, zu der Zeit, als sich Visual Studio in der Beta-Phase befand, war dies einer der Fehler, die sie später aus dem Compiler heraus debuggen würden. Ich verwende jetzt die offizielle Version des Visual Studio 2010-Compilers und alles funktioniert. Es steht außer Frage, dass der Compiler das Problem war. (wie unten von Amelia angegeben - ich war nicht allein in diesem Problem)
Wallter
1
Nur dass Amelia über einen anderen Compiler spricht (der dieses Problem definitiv nicht hat). Übrigens ist es schön, wenn Sie die Frage bearbeitet haben, um ausdrücklich zu erwähnen, dass das Problem mit der Beta 2010 zusammenhängt . Es wäre eine Schande, wenn ein Neuling schlechten Code schreibt, dann Ihre Frage sieht und davon ausgeht, dass VS2010 gerade kaputt ist.
Jalf