2017-06-14 1 views
-1

ich ein Problem habe, wenn eine Klasse in einer separaten Objektdatei deklariert und dann in der Hauptfunktion einer anderen Datei mit:C++ Problem mit Klasse in einer separaten Objektdatei erklärte

main.cpp:

#include <helloclass.hpp> 


using namespace std; 

int main() { 
    Hello hi; 
    hi.hello(); 

    return 0; 
} 

helloclass.cpp:

#include <iostream> 

using namespace std; 

class Hello { 
    public: 

    void hello() { 
     cout << "Hello world\n"; 
    } 

    Hello() {} 
}; 

helloclass.hpp:

class Hello { 
    public: 

    void hello(); 


    Hello(); 
}; 

Dann lief ich die folgenden Befehle:

g++ -I. -c main.cpp 
g++ -c helloclass.cpp 
g++ -o main main.o helloclass.o 

jedoch der letzte Befehl gibt die folgende Ausgabe:

main.o: In function `main': 
main.cpp:(.text+0x1f): undefined reference to `Hello::Hello()' 
main.cpp:(.text+0x2b): undefined reference to `Hello::hello()' 
collect2: error: ld returned 1 exit status 

Für mich scheint es, wie ich etwas ziemlich offensichtlich fehlt bin. Kann jemand das beheben?

+3

Sie sollten nicht versuchen, in C++ durch Versuch und Irrtum zu programmieren. Du solltest ein [gutes Buch] bekommen (https://stackoverflow.com/questions/388242/the-definitive-c-book-guide-and-list) – Rakete1111

+0

danke, aber ich habe schon eins. – asc11

Antwort

1

Sie sollten die Klasse in der separaten Quelldatei nicht neu definieren. Fügen Sie stattdessen die Header-Datei hinzu und implementieren Sie die Hello::hello-Funktion (und den -Konstruktor).

+0

Ich habe die Header-Datei bereits in der ersten Zeile von 'main.cpp' eingefügt und die Klasse in der Quelldatei nicht _re_definiert. – asc11

+0

@ asc11 Die problematische Quelldatei ist 'helloclass.cpp'. –

+0

ok, tut mir leid, du hast Recht. Ich habe das Problem behoben. – asc11

Verwandte Themen