"undefined reference to" PROBLEM!
-
Hi,
ich versuche nun schon seit eine weile unter eclipse(CDT) ein kleines Programm zu laufen zu bringen.
Leider meckert der Linker immer wieder sobald ich in meine main irgend Funktion, konstruktoer oder ähnliches einbinden möchte.
Die Fehlermeldung ist immer wieder die Selbe."undefined reference to" und dann eben die Funktion einer eingebundenen Klasse oder der Konstruktor???
Komme dadurch nicht weiter. was muss ich unter eclipse tun, damit es funktioniert?
Danke
-
Quellcode?
Exakte Fehlermeldung?
Ohne brauch ich leider meine Kristallkugel und die find ich gerade nicht

-
Dafür braucht man keinen Quellcode. Der allseits bekannte Fehler, das eine Implementierung zu einem Typ oder Funktion fehlt. Welche Implementierung fehlt, steht sicherlich in der kompletten Fehlermeldung. Und dann weiß man auch, was man zu machen hat.
Implementierung nachliefern! Entweder selber schreiben oder eine Lib dazu linken, in der die Implementierung vorhanden ist.
-
hi,
ich habe vor kurzem auch mit c++ angefangen und habe nun ein ähnliches Problem zum Thema. Hier erstmal mein Code://Protocol.h class Protocol{ std::vector<std::string> inhalt; public: void add(std::string input); int getSize(); std::string getItem(int i); };//Protocol.cpp #include "Protocol.h" void Protocol::add(std::string input){ inhalt.push_back(input); } std::string Protocol::getItem(int i){ return inhalt.at(i); } int Protocol::getSize(){ return inhalt.size(); }//Scan.cpp #include "Protocol.h" class Scan{ std::string root; Protocol* ergebnis; public: Scan(Protocol* start); void start(std::string input); void search(); }; [...] void Scan::start(std::string input){ root = input; ergebnis->add(input); std::cout << ergebnis->getItem(0)<< " " << ergebnis->getSize() <<"\n"; }Hierzu erhalte ich nun den folgenden Fehler:
In function `Scan::start(std::basic_string<char, std::char_traits<char>, std::allocator<char> >)': Scan.cpp:(.text+0x26c): undefined reference to `Protocol::add(std::basic_string<char, std::char_traits<char>, std::allocator<char> >)' Scan.cpp:(.text+0x282): undefined reference to `Protocol::getSize()' Scan.cpp:(.text+0x29b): undefined reference to `Protocol::getItem(int)'Was ich hier nicht so richtig verstehe ist, warum das ganze so nicht geht. Denn wenn ich die Funktionsdefinitionen mit in die Headerdatei schreibe funktioniert der Code doch.
Ich versuche das ganze mit g++ unter Linux.
-
Ja, steht doch da. Du hast die drei Protocol-Methoden nicht implementiert. Bzw. der Linker kennt sie einfach nicht. Wenn du sie in den Header tust, kennt er sie. Logische Folgerung???
Du hast anscheinend die Protocol.cpp nicht mitkompiliert.
-
Artchi schrieb:
Du hast anscheinend die Protocol.cpp nicht mitkompiliert.
Damit möchte Dir Archi also sagen, dass du ein Projekt in deiner IDE anlegen sollst, und diesem dann jede benötigte Datei hinzufügen. Dann erkennt sie auch der Linker.
-
Super es ging mit:
g++ -c Protocol.cpp -o Protocol.o g++ -Wall Scan.cpp Protocol.o -o Scandanke für die hilfe
-
Hab zwar noch nicht die Lösung für dieses Problem, hab mich aber bei diesem Link:
http://www.bigwilma.de/index.php?topic=Tutorials&site=Eclipse CDT
an die Aussage ganz unten gehalten und lasse mir zunächst ein Managed Project erstellen, damit geht dann alles ohne Probleme.
Die eigentliche Lösung steht auf der Seite auch, aber so ganz steige ich da noch nicht durch.
-
@korso: Ehm guck dir bitte mal Referenzen an, unsigned an und const-correctness.