C++: verwenden von Klassendefinitionen aus anderen Dateien

der_ro

der_ro

Mitglied
Thread Starter
Dabei seit
15.10.2006
Beiträge
29
Reaktionspunkte
0
Hallo zusammen!

Ich habe in verschiedenen Dateien Klassendefinitionen abgelegt. Nuin möchte ich meinem "main.cpp" diese verwenden.

g++ meldet beim kompileren (wenn ich z.B. test.hpp und test.cpp über die #include-Anweisung einbinde):

Code:
/tmp/cc4ZSUhx.o: In function `main':
main.cpp:(.text+0x4e2): undefined reference to `meineKlasse::meineKlasse()'

Ich interprtiere diese Meldung so, daß der Konstruktor nicht gefunden wird. Er ist aber in test.cpp implementiert.

Wißt Ihr, was ich falsche mache?

Gruß,

Roland
 
Du hast offenbar den Konstruktor Deiner Klasse zwar in der Klassendefinition stehen, aber Du hast ihn nirgendwo implementiert. Wie sieht denn test.cpp aus?

Mal ganz abgesehen davon bindet man .cpp-Dateien normalerweise nicht über #inlcude ein, sondern übergibt sie dem Compiler bzw. Linker als zusätzliche Quelldateien.
 
Ah...das einbinden oer #include kam mir auch nicht ganz sauber vor! (Hatte den Tip aus einem anderen Forum)...

Also die test.cpp heißt in Wirklichkeit FGMultiplayTxMgr.cxx (aus dem FlightGear-Projekt)

Die (meiner Ansicht nach relevanten Abschintte sind):

Die #include-Anweisung für die Header-Datei:
Code:
#include "multiplaytxmgr.hxx"

Die Definitionen des Konstruktors und des Destruktors:
Code:
/******************************************************************
* Name: FGMultiplayTxMgr
* Description: Constructor.
******************************************************************/
FGMultiplayTxMgr::FGMultiplayTxMgr() {

    // int iPlayerCnt;         // Count of players in player array

    // Initialise private members
    m_bInitialised = false;
    mLocalPlayer = NULL;

}


/******************************************************************
* Name: ~FGMultiplayTxMgr
* Description: Destructor. Closes and deletes objects owned by
* this object.
******************************************************************/
FGMultiplayTxMgr::~FGMultiplayTxMgr() {

    Close();

}

In meiner main.cpp versuche ich nun folgendes:
Code:
FGMultiplayTxMgr *meinTxMgr;  // Zeiger auf ein TxMgr-Objekt deklarieren
	meinTxMgr = new FGMultiplayTxMgr; // dann dieses Objekt erzeugen

Ich versuche mit
Code:
g++ -o filedriver -I ~/FlightGear/FG-0.9.8/src/ -lstdc++ main.cpp
zu kompilieren.

Das führt zur Fehlermeldung:
Code:
/tmp/cc4ZSUhx.o: In function `main':
main.cpp:(.text+0x4e2): undefined reference to `FGMultiplayTxMgr::FGMultiplayTxMgr()'
collect2: ld returned 1 exit status

Wie gebe ich g++ denn dann FGMultiplayTxMgr.cpp als zusätzliche Datei an?
 
Zuletzt bearbeitet:
Wie gebe ich g++ denn dann FGMultiplayTxMgr.cpp als zusätzliche Datei an?
g++ -o irgendwas main.cpp FGMultiplayTxMgr.cpp

Also einfach die Dateien hintereinander schreiben.

Ich kenne jetzt zwar das FlightGear-Projekt nicht, nehme aber mal stark an, dass da eine vernünftige Bauumgebung, sprich Makefiles bei sind. Warum verwendest Du die nicht einfach?

Vielleicht solltest Du auch erstmal mit etwas einfacherem anfangen. Schreib Dir einfach mal selbst eine Klasse ohne viel drum herum und probier aus, ob das funktioniert. Wenn das klappt erweiter sie und vergleiche.
 
  • Gefällt mir
Reaktionen: der_ro
Prima...wenn ich die zweite Datei mit angebe, klappt alles problemslos! Dankeschön! :)
 
Zurück
Oben Unten