PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : cout - kryptische Fehlermeldungen



RoCMe
14-10-2005, 12:54
hi!
Ich bin gerade dabei, meine ersten Schritte iin C++ zu machen - aber es scheitert anscheinend schon an einem einfachen "Hello World" - Programm...
Ich weiß nicht, was ich falsch gemacht haben soll, aber ich versuche immer folgenden Code:




#include <iostream>
int main() {
using namespace std;
cout << "Hello world\n";
return 0;
}



mit Hilfe von gcc



gcc ./test.cpp -o ./test


zu kompilieren, aber ich ernte nur kryptische Fehlermeldungen:


rocme@notebook:~/C++> gcc ./test.cpp -o ./test
test.cpp:6:2: warning: no newline at end of file
/tmp/ccK3KQ1p.o(.text+0x25): In function `main':
test.cpp: undefined reference to `std::cout'
/tmp/ccK3KQ1p.o(.text+0x2a):test.cpp: 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*)'
/tmp/ccK3KQ1p.o(.text+0x56): In function `__static_initialization_and_destruction_0(int, int)':
test.cpp: undefined reference to `std::ios_base::Init::Init[in-charge]()'
/tmp/ccK3KQ1p.o(.text+0x85): In function `__tcf_0':
test.cpp: undefined reference to `std::ios_base::Init::~Init [in-charge]()'
/tmp/ccK3KQ1p.o(.eh_frame+0x11): undefined reference to `__gxx_personality_v0'
collect2: ld returned 1 exit status
rocme@notebook:~/C++>


Ich versteh nicht was mir der Compiler sagen will ... Irgendwie scheint was mit der cout-Funktion nicht zu stimmen, aber was genau ist denn falsch??? Die genaue Datei in /tmp/ ändert sich übrigens bei jedem Kompilierversuch, falls das weiterhelfen sollte...
Bin dankbar für jede Hilfe!!!

mfg
RoCMe

anda_skoa
14-10-2005, 13:03
gcc ist ansich der C Compiler.

Er erkennt zwar, daß es sich hier um eine C++ Datei handelt und kompiliert sie auch als C++, allerdings weiß dann zum Schluß die Linkerstufe nicht, daß sie gegen die C++ Standardbibliothek linken muß.

Und dort ist die Implementation der C++ IO Streams drinnen :)

Nimmt g++ statt gcc, dann sollte alles automatisch klappen.

Ciao,
_

RoCMe
14-10-2005, 16:27
autsch...
hätte man drauf kommen können :( war mir zwar im pinzip klar, aberr wenn man einmal nicht aufpast ...
DANKE!

exigent
14-10-2005, 17:02
Und bist du dir sicher, dass du den namespace in der main setzen willst? IMHO gehört der doch eher aus der funktion raus:



#include <iostream>
using namespace std;

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

peschmae
14-10-2005, 17:33
Das kommt halt daruf an was du erreichen willst. Grundsätzlich hebelst du ja mit einem globalen using namespace std; (d.h. ausserhalb von main) das gesamte Namespace-Konzept einfach aus.

Da ist es imo schon sinnvoll das nur lokal - in der (und für die) main-Funktion zu machen.
Oder gleich std::cout direkt angeben halt.

Grundsätzlich geht aber beides bzw. alle drei Varianten.

MfG Peschmä

exigent
14-10-2005, 18:21
Hmm... von der Warte habe ich das noch gar nicht beleuchtet. Da ist was Wahres dran.