PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : cout "geht nicht" (undeclared)



nidhoegg
07-04-2006, 18:59
Hallo!
Ich versuche gerade, mein erstes C++-Programm unter Unix zu starten und habe leider ein Problem, zu dem ich noch keine Lösung gefunden habe.
Das Programm ist ganz simpel und sieht so aus:
#include <iostream>
//using namespace std;
int main (void){
cout << "Viel spass mit C++" << endl;
return 0;
}
jetzt hier mein Problem:
PG-1$ gcc erstesprogramm.cpp
erstesprogramm.cpp: In function `int main()':
erstesprogramm.cpp:5: error: `cout' undeclared (first use this function)
erstesprogramm.cpp:5: error: (Each undeclared identifier is reported only once
for each function it appears in.)
erstesprogramm.cpp:5: error: `endl' undeclared (first use this function)
Unter Mac OS 10.3
Unter Lunx (Ubuntu Breezy) funktioniert es auch nicht.
:!gcc erstesprogramm.cpp
erstesprogramm.cpp: In function »int main()«:
erstesprogramm.cpp:5: Fehler: »cout« wurde in diesem Gültigkeitsbereich nicht definiert
erstesprogramm.cpp:5: Fehler: »endl« wurde in diesem Gültigkeitsbereich nicht definiert

Wenn ich
using namespace std;im Prgramm drin lasse, bekomme ich folgende Fehermeldung:
ld: Undefined symbols:
std::basic_ostream<char, std::char_traits<char> >::operator<<(std::basic_ostream<char, std::char_traits
ar> >& (*)(std::basic_ostream<char, std::char_traits<char> >&))
std::ios_base::Init::Init[in-charge]()
std::ios_base::Init::~Init [in-charge]()
std::cout
std::basic_ostream<char, std::char_traits<char> >& std::endl<char, std::char_traits<char> >(std::basic_
ream<char, std::char_traits<char> >&)
std::basic_ostream<char, std::char_traits<char> >& std::operator<< <std::char_traits<char> >(std::basic
tream<char, std::char_traits<char> >&, char const*)
___gxx_personality_v0 (Mac OS)

und Linux:
gcc erstesprogramm.cpp
/tmp/ccIyDO6i.o: In function `main':
erstesprogramm.cpp:(.text+0x25): undefined reference to `std::cout'
erstesprogramm.cpp:(.text+0x2a): undefined reference to `std::basic_ostream<char, std::char_traits<char> >& std::operator<< <std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*)'
erstesprogramm.cpp:(.text+0x35): undefined reference to `std::basic_ostream<char, std::char_traits<char> >& std::endl<char, std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&)'
erstesprogramm.cpp:(.text+0x3b): undefined reference to `std::basic_ostream<char, std::char_traits<char> >::operator<<(std::basic_ostream<char, std::char_traits<char> >& (*)(std::basic_ostream<char, std::char_traits<char> >&))'
/tmp/ccIyDO6i.o: In function `__tcf_0':
erstesprogramm.cpp:(.text+0x59): undefined reference to `std::ios_base::Init::~Init()'
/tmp/ccIyDO6i.o: In function `__static_initialization_and_destruction_0(int, int)':
erstesprogramm.cpp:(.text+0x86): undefined reference to `std::ios_base::Init::Init()'
/tmp/ccIyDO6i.o:(.eh_frame+0x11): undefined reference to `__gxx_personality_v0'
collect2: ld gab 1 als Ende-Status zurück
Ich habe schon im Netz nach Antworten gesucht, aber da ich die Fehler nicht so richtig verstehe, weiß ich auch nicht soi genau, wonach ich suchen soll…
Würde mich freuen, wenn jemand eine Idee zur Problemlösung hätte. Das Programm an sich ist ja ziemlich simpel und unter Windows funktioniert es auch einwandfrei (Das Buch, was ich besitze beschäftigt sich leider auch hauptsächlich mit Windows).

Grüße,

nidhoegg

locus vivendi
07-04-2006, 19:34
Ich habe schon im Netz nach Antworten gesucht, aber da ich die Fehler nicht so richtig verstehe, weiß ich auch nicht soi genau, wonach ich suchen soll…
Ich wollte erst nicht antworten, weil das so ungefähr das 133-tausendste Mal ist das dies jemand fragt, aber gut, dann will ich mal nicht so sein... Probier folgendes.
1. Lass das "using namespace std;" drin, oder schreibe "using std::cout;" in der main, oder schreibe statt "cout" "std::cout" (selbiges für "endl").
2. Benutze zum Übersetzen das C++-Frontend des GCC UND aktiviere Warnungen, also: "g++ -Wall -Wextra -o erstesprogramm erstesprogramm.cpp"

Ich bin etwas neugierig, was für ein Tuturial du verwendest (falls du es tust). Benutzt eins aus dem Netz? Kannst ja mal einen Link posten oder so.

Caveman
07-04-2006, 19:39
Wie wäre's mit einem C++ Compiler:

g++ -o erstesprogramm erstesprogramm.cpp :)

nidhoegg
07-04-2006, 19:54
Hallo!

schreibe "using std::cout;" in der main, oder schreibe statt "cout" "std::cout" (selbiges für "endl").
2. Benutze zum Übersetzen das C++-Frontend des GCC UND aktiviere Warnungen, also: "g++ -Wall -Wextra -o erstesprogramm erstesprogramm.cpp"[/code]
Jetzt funktioniert es :), allerdings meckert der compiler unter Mac OS, dass Wextra "unrecognized" ist. Okay, da muss ich mich einlesen.
Werde dann hier im Forum noch mal ein bisschen suchen, wenn das schon so oft behandelt wurde, tut mir leid.
[code]Ich bin etwas neugierig, was für ein Tuturial du verwendest (falls du es tust). Benutzt eins aus dem Netz? Kannst ja mal einen Link posten oder so.
Ich benutze kein Tutorial. Neben der Vorlesung, die ich besuche (Wir programmieren mit Visual C++) habe ich dieses Buch (http://www.ciao.de/C_Lernen_und_professionell_anwenden__2255260) und mir im Netz noch mal dieses hier angeschaut: http://www.cpp-entwicklung.de/ , „C++ Entwicklung mit Linux“, das auch hier im Forum empfohlen wird. Dort ist auch ein Beispiel, wo „using namespace std;“ benutzt wird. Ich muss da ein wenig querlesen, deswegen hab ich vielleicht was übersehen.
Danke für deine Hilfe.

Gruß, nidhoegg

nidhoegg
07-04-2006, 20:05
Hi,

Wie wäre's mit einem C++ Compiler:

g++ -o erstesprogramm erstesprogramm.cpp :)
Ich dachte, die gcc erkennt an der Dateiendung, welchen compiler er benutzen soll. Das war wohl eine Fehlinformation ;)
Ich seh schon, mein Problem ist, dass ich mit gcc nicht umgehen kann. Da werd ich wohl noch einiges zu lesen haben.

Gruß,

nidhoegg

locus vivendi
07-04-2006, 20:43
Ich dachte, die gcc erkennt an der Dateiendung, welchen compiler er benutzen soll. Das war wohl eine Fehlinformation
Nein, das ist im Prinzip gar nicht falsch. Es ist nur nicht die volle Wahrheit. Wenn man den GCC nicht als "c++" oder "g++" aufruft, wird nämlich nicht automatisch die C++-Standardbibliothek hinzugelinkt. Vielleicht gibt es auch noch ein paar subtile Unterschiede, das weiß ich nicht genau.

Übrigens, Doku zum GCC ist meistens auch lokal vorhanden "info gcc" auf der Kommandozeile, oder, für diejenigen die sich glücklich schätzen können, KDE benutzen zu dürfen, im Konqueror "info:/gcc". Oder halt unter "Manuals" links an der Seite auf http://gcc.gnu.org nachschauen.