2011-01-08 11 views
0

Ich arbeitete an meinem Projekt, während ich entschied, dass ich es in Dateien teilen sollte. Wie auch immer, ich hatte Probleme mit diesem Problem, und alle Ratschläge, die ich über Google fand, hatten mit dem Vergessen zu tun, beide Objektdateien zu verknüpfen, die ich richtig mache (zumindest denke ich das).Nicht definierte Referenz, während Kopfzeile in C++

Makefile:

test : class.o main.o 
g++ class.o main.o -o test.exe 

main.o : main.cpp 
g++ main.cpp -c 

class.o : class.cpp 
g++ class.cpp -c 

main.cpp

#include <iostream> 
#include "class.h" 
using namespace std; 

int main() { 
Trida * t = new Trida(4); 
t->fce(); 
return 0; 
} 

class.h

#ifndef CLASS 
#define CLASS 
class Trida { 
private: 
int a; 
public: 
Trida(int n); 
void fce(); 
}; 
#endif 

class.cpp

#include <iostream> 

using namespace std; 

class Trida { 
private: 
int a; 

public: 
Trida(int n) { 
    this->a = n; 
} 

void fce() { 
    cout << this->a << endl; 
} 
}; 

Fehlermeldung:

[email protected]:~/Skola/test$ make 
g++ class.cpp -c 
g++ main.cpp -c 
g++ class.o main.o -o test.exe 
main.o: In function `main': 
main.cpp:(.text+0x26): undefined reference to `Trida::Trida(int)' 
main.cpp:(.text+0x54): undefined reference to `Trida::fce()' 
collect2: ld returned 1 exit status 
make: *** [test] Error 1 

Antwort

4

Also hier ist was du falsch gemacht hast. In class.cpp erstellen Sie eine neue Trida-Klasse neu, statt die Klasse, die Sie in class.h erstellt haben, zu implementieren. Ihre class.cpp sollte wie folgt aussehen:

#include <iostream> 
#include "class.h" 

using namespace std; 

Trida::Trida(int n) 
{ 
    this->a = n; 
} 

void Trida::fce() { cout << this->a << endl; } 

Und eigentlich sollte man die Initialisierung verwenden, anstatt Zuordnung in Ihrem Konstruktor:

Trida::Trida(int n) : a(n) {} 
+0

Wow, das schnell war. Das Problem ist einfacher als ich dachte. Vielen Dank :-) – Gwynbleidd

0

Sie definieren Klasse trida zweimal (in der Header-Datei class.h und in der Quelldatei class.cpp) Ihre class.cpp Datei sein sollte wie

#include <iostream> 
#include "class.h" //include "class.h" 
using namespace std; 

Trida::Trida(int n):a(n) //Initialization list 
{ 
} 

void Trida::fce() 
{ 
    cout << this->a << endl; 
}