C++: verwenden von Klassendefinitionen aus anderen Dateien

Dieses Thema im Forum "Mac OS X Entwickler, Programmierer" wurde erstellt von der_ro, 23.03.2007.

  1. der_ro

    der_ro Thread Starter MacUser Mitglied

    Beiträge:
    29
    Zustimmungen:
    0
    Registriert seit:
    15.10.2006
    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
     
  2. eloso

    eloso MacUser Mitglied

    Beiträge:
    154
    Zustimmungen:
    3
    Registriert seit:
    30.11.2003
    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.
     
  3. der_ro

    der_ro Thread Starter MacUser Mitglied

    Beiträge:
    29
    Zustimmungen:
    0
    Registriert seit:
    15.10.2006
    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: 23.03.2007
  4. eloso

    eloso MacUser Mitglied

    Beiträge:
    154
    Zustimmungen:
    3
    Registriert seit:
    30.11.2003
    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.
     
  5. der_ro

    der_ro Thread Starter MacUser Mitglied

    Beiträge:
    29
    Zustimmungen:
    0
    Registriert seit:
    15.10.2006
    Prima...wenn ich die zweite Datei mit angebe, klappt alles problemslos! Dankeschön! :)
     
Die Seite wird geladen...

Diese Seite empfehlen