Benutzerdefinierte Suche

C++: verwenden von Klassendefinitionen aus anderen Dateien

  1. der_ro

    der_ro Thread StarterMacUser Mitglied

    Mitglied seit:
    15.10.2006
    Beiträge:
    29
    Zustimmungen:
    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
     
    der_ro, 23.03.2007
  2. eloso

    elosoMacUser Mitglied

    Mitglied seit:
    30.11.2003
    Beiträge:
    154
    Zustimmungen:
    3
    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.
     
    eloso, 23.03.2007
  3. der_ro

    der_ro Thread StarterMacUser Mitglied

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

    elosoMacUser Mitglied

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

    der_ro Thread StarterMacUser Mitglied

    Mitglied seit:
    15.10.2006
    Beiträge:
    29
    Zustimmungen:
    0
    Prima...wenn ich die zweite Datei mit angebe, klappt alles problemslos! Dankeschön! :)
     
    der_ro, 23.03.2007
Die Seite wird geladen...
Ähnliche Themen - C++ verwenden Klassendefinitionen
  1. Wolfseye
    Antworten:
    16
    Aufrufe:
    351
  2. GeFa
    Antworten:
    9
    Aufrufe:
    603
    Gondomir
    15.08.2016
  3. Saloice
    Antworten:
    4
    Aufrufe:
    578
  4. ZoliTeglas
    Antworten:
    5
    Aufrufe:
    384
    mrthomasd
    13.10.2015
  5. emse88
    Antworten:
    2
    Aufrufe:
    458