"undefined reference" bei String Gebrauch in Linux
-
Hi,
ich bin momemtan dabei C++ zu lernen, und frustierenderweise funktioniert der Code unter Windows im Visual Studio aber nicht unter Linux mit dem g++.
Ich habe das Problem runtergebrochen auf ein winziges Beispiel, das es nicht tut. Fehlt ein #include, muss ich das Ganze mit irgendeiner Library linken, stimmt der Namespace nicht ...? Ich komme einfach nicht drauf.
Hier der Code:
person.hpp :
#ifndef PERSON_HPP #define PERSON_HPP #include <string> using namespace std; class Person { private: string name; public: Person(string pName); string getName(); void setName(string pName); }; #endif
person.cpp :
#include "person.hpp" Person::Person(string pName) { name = pName; } string Person::getName() { return name; } void Person::setName(string pName) { name = pName; }
testPerson.cpp :
#include "person.hpp" #include <iostream> #include <string> using namespace std; int main() { string name = "Donald Duck"; Person * p = new Person(name); cout << "Name: " << p->getName() << endl; return 0; }
Seltsamerweise funktioniert es, wenn ich den Code untereinander in eine Datei packe, aber bei separaten Dateien funktioniert es nicht.
Ich bin dankbar für Hilfe!
dulle
-
1. Benutz bitte Codetags! Einfach [cpp]code[/
pp] um den Code machen.
2. Wie rufst du denn den g++ auf? Vermutlich linkst du einfach nicht beide .cpp-Dateien zusammen. Du musst wissen, dass #include nur eine Textersetzung ist. Der Compiler lädt deswegen nicht automatisch den Code aus einer anderen .cpp-Datei. Nimmst du irgend eine IDE? Die könnte das für dich automatisch machen.
Ansonsten
g++ -Wall -Wextra -std=c++0x -pedantic-errors -c person.cpp g++ -Wall -Wextra -std=c++0x -pedantic-errors -c testPerson.cpp g++ person.o testPerson.o -o testPerson
das kompiliert beide Dateien (mit eingeschalteten Warnungen) und linkt sie dann zu einem Programm testPerson zusammen.
-
Dieser Thread wurde von Moderator/in rüdiger aus dem Forum Linux/Unix in das Forum Compiler- und IDE-Forum verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
Hast Recht! Damits läufts.
Ich werde mal gucken, dass ich irgendwo eine gute Anleitung finde, wie das mit dem Linken genau funktioniert ...
Da der Code, kopiert in eine Datei, so funktioniert, hatte ich gedacht, dass hier #include (als reine Textersetzung) die richtige Wahl wäre. Wohl nicht ;).Momentan programmiere ich nur auf der Shell mit Hilfe von vim und dem g++, mal gucken ob das auch bei etwas größeren Projekten noch skaliert, gerade wenn es um solche Geschichten wie Objektdateien und Bibliotheken linken etc. geht.
Danke dir für deine prompte Hilfe!
-
dulle schrieb:
Da der Code, kopiert in eine Datei, so funktioniert, hatte ich gedacht, dass hier #include (als reine Textersetzung) die richtige Wahl wäre. Wohl nicht ;).
Prinzipiell würdest du das auch mit include machen können. Warum und wie das funktioniert, wirst du sicher begreifen, wenn du dich mit compilieren, linken und dem Präprozessor, auseinander gesetzt hast.
dulle schrieb:
Momentan programmiere ich nur auf der Shell mit Hilfe von vim und dem g++, mal gucken ob das auch bei etwas größeren Projekten noch skaliert, gerade wenn es um solche Geschichten wie Objektdateien und Bibliotheken linken etc. geht.
Für sowas gibts make. Wobei es auch nicht verkehrt ist sich damit auseinander zu setzen. Make kann man für viele Dinge nicht nur zum Programm erstellen nutzen, häufig werden aber andere Mechanismen genutzt. Make ist auch teilweise kompatibel zu Visual Studio.
http://www.c-plusplus.net/forum/viewtopic-var-t-is-88418.html