anderen Konstruktor der eigenen Klasse aufrufen

Schnelle objektorientierte, kompilierende Programmiersprache.
Benutzeravatar
fat-lobyte
Beiträge: 1398
Registriert: Sa Jul 05, 2008 12:23 pm
Wohnort: ::1
Kontaktdaten:

Re: anderen Konstruktor der eigenen Klasse aufrufen

Beitrag von fat-lobyte » Di Feb 12, 2013 9:08 am

Momentchen mal, das ist aber kein Compilerfehler. Irgendwas ist da mit deiner Installation verkehrt. Aus welchem PPA hast du den Compiler denn? Gibt es vielleicht einen anderen?
Welche Ubuntu-Version hast du eigentlich?

Ansonsten, versuch mal Clang zu installieren:

Code: Alles auswählen

sudo apt-get install clang
Ich glaube, das geht leider noch nicht so plug&play (ws. fehlen header oder sowas). Der Aufruf ist der gleiche wie mit gcc.
Haters gonna hate, potatoes gonna potate.

Benutzeravatar
Kerli
Beiträge: 1456
Registriert: So Jul 06, 2008 10:17 am
Wohnort: Österreich
Kontaktdaten:

Re: anderen Konstruktor der eigenen Klasse aufrufen

Beitrag von Kerli » Di Feb 12, 2013 10:11 am

Hast du denn auch g++ installiert (für C++) und nicht nur den gcc (für C).
"Make it idiot-proof and someone will invent an even better idiot." (programmers wisdom)

OpenGL Tutorials und vieles mehr rund ums Programmieren: http://www.tomprogs.at

Glocke
Beiträge: 332
Registriert: Fr Okt 26, 2012 8:39 am

Re: anderen Konstruktor der eigenen Klasse aufrufen

Beitrag von Glocke » Di Feb 12, 2013 3:16 pm

fat-lobyte hat geschrieben:Welche Ubuntu-Version hast du eigentlich?
Version 12.04 - die offiziellen Quellen gehen nur bis gcc 4.6.x
fat-lobyte hat geschrieben:Momentchen mal, das ist aber kein Compilerfehler. Irgendwas ist da mit deiner Installation verkehrt. Aus welchem PPA hast du den Compiler denn? Gibt es vielleicht einen anderen?
Habe beim Googeln folgendes gefunden:

Code: Alles auswählen

sudo add-apt-repository ppa:Ubuntu-toolchain-r/test  
sudo apt-get update  
sudo apt-get install gcc-4.7 g++-4.7
Und g++-4.7 steht sogar explizit dabei :D
Kerli hat geschrieben:Hast du denn auch g++ installiert (für C++) und nicht nur den gcc (für C).
Ich bin echt so selten-blöd und hab das vergessen :D Und da steht sogar noch dabei g++-4.7 xD

Code: Alles auswählen

g++-4.7 -o test test.cpp -std=c++11
Jetzt funktioniert es :)
fat-lobyte hat geschrieben: Ansonsten, versuch mal Clang zu installieren:

Code: Alles auswählen

sudo apt-get install clang
Der erster Versuch ohne explizite Verwendung von C++11 war schon aufschlussreicher als mit gcc:

Code: Alles auswählen

clang -o test test.cpp
test.cpp:18:7: error: delegating constructors are permitted only in C++11
    : Test(0, 0) {
      ^~~~
1 error generated.
Der zweite Versuch mit -std=c++11 wirkt so, als wenn er iostream nicht kennt...

Code: Alles auswählen

clang -o test test.cpp -std=c++11
/tmp/test-0UHsxg.o: In function `__cxx_global_var_init':
test.cpp:(.text+0x10): undefined reference to `std::ios_base::Init::Init()'
test.cpp:(.text+0x16): undefined reference to `std::ios_base::Init::~Init()'
/tmp/test-0UHsxg.o: In function `Test::print()':
test.cpp:(.text+0xbb): undefined reference to `std::cout'
test.cpp:(.text+0xd6): 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*)'
test.cpp:(.text+0xe7): undefined reference to `std::ostream::operator<<(int)'
test.cpp:(.text+0xf9): 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*)'
test.cpp:(.text+0x10b): undefined reference to `std::ostream::operator<<(int)'
test.cpp:(.text+0x111): 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> >&)'
test.cpp:(.text+0x11d): undefined reference to `std::ostream::operator<<(std::ostream& (*)(std::ostream&))'
clang: error: linker command failed with exit code 1 (use -v to see invocation)
Durch Googeln habe ich dann rausgefunden, dass das Package clang auch clang++ installiert.

Code: Alles auswählen

clang++ -o test test.cpp -std=c++11
Das geht :)

Bezüglich g++ oder clang++ ... wo liegen die Vor- und Nachteile?

LG Glocke

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8859
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: anderen Konstruktor der eigenen Klasse aufrufen

Beitrag von Xin » Di Feb 12, 2013 3:31 pm

Glocke hat geschrieben:Bezüglich g++ oder clang++ ... wo liegen die Vor- und Nachteile?
Afaik sind g++ Executables schneller, dafür ist clang moderner, hat bessere Fehlermeldungen und weiter mit C++11.
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

Benutzeravatar
darksider3
Beiträge: 347
Registriert: Fr Sep 14, 2012 6:26 pm
Wohnort: /dev/sda1
Kontaktdaten:

Re: anderen Konstruktor der eigenen Klasse aufrufen

Beitrag von darksider3 » Sa Feb 16, 2013 2:38 pm

Xin hat geschrieben:Afaik sind g++ Executables schneller, dafür ist clang moderner, hat bessere Fehlermeldungen und weiter mit C++11.
Demnach ist clang wohl eher was für "Anfänger"(Oder Leute die bessere Fehlermeldungen mögen) als der immer heilig angepriesene gcc/++^^
effizienz ist, wenn ich ein loch bohre und hinterher mein nachbar auch ein bild aufhängen kann... ^^
Meine Homepage und der Microblog von mir :)
Live Life dont let Life Live You!
Am meisten Aktiv in Webentwicklung und PHP im Wiki

Benutzeravatar
fat-lobyte
Beiträge: 1398
Registriert: Sa Jul 05, 2008 12:23 pm
Wohnort: ::1
Kontaktdaten:

Re: anderen Konstruktor der eigenen Klasse aufrufen

Beitrag von fat-lobyte » Sa Feb 16, 2013 3:28 pm

darksider3 hat geschrieben:Demnach ist clang wohl eher was für "Anfänger"(Oder Leute die bessere Fehlermeldungen mögen) als der immer heilig angepriesene gcc/++^^
Ich glaube nicht, dass GCC viel "heilig angepriesen" wurde, es gab nur lange keine Alternative. Aber du hast recht, wenn ich jetzt zu Programmieren beginnen würde, würde ich es mit Clang machen.

Auch der GCC ist noch nicht so ganz obsolet: er unterstützt immer noch extrem viele Architekturen und Platformen.
Haters gonna hate, potatoes gonna potate.

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8859
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: anderen Konstruktor der eigenen Klasse aufrufen

Beitrag von Xin » Sa Feb 16, 2013 11:44 pm

darksider3 hat geschrieben:
Xin hat geschrieben:Afaik sind g++ Executables schneller, dafür ist clang moderner, hat bessere Fehlermeldungen und weiter mit C++11.
Demnach ist clang wohl eher was für "Anfänger"(Oder Leute die bessere Fehlermeldungen mögen) als der immer heilig angepriesene gcc/++^^
Gute Fehlermeldungen sind kein Spaß für Anfänger, sondern eine sehr große Hilfe bei der Entwicklung. Zur Entwicklung möchte ich auf clang wechseln. Wenn es darum geht, schnelle Release-Executables zu erzeugen, scheint GCC noch vorne zu liegen.
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

Antworten