2016-07-25 32 views
0

Ich arbeite an einem Projekt mit Qt Creator.Undefinierter Verweis auf den Standardkonstruktor in einem Konstruktor

Lassen Sie uns sagen, dass ich ein einfaches Werkzeug Klasse:

#ifndef TOOL_H 
#define TOOL_H 

#include <map> 
#include <string> 
#include "myobject.h" 

class Tool 
{ 
public: 
    Tool(); 

private: 
    const std::map<std::string, MyObject*> myMap; 
}; 

#endif // TOOL_H 

mit einem Standardkonstruktor wie folgt aus:

#include "tool.h" 

using namespace std; 

Tool::Tool() 
{ 
    myMap = new map<string, MyObject*>(); 
    // populate myMap 
} 

Dann möchte ich die Klasse im Konstruktor einer anderen Klasse verwenden:

#include "myclass.h" 

using namespace std; 

MyClass::MyClass() 
{ 
    Tool t; 
} 

Aber ich bekomme den folgenden Kompilierfehler:

In function 'MyClass::MyClass()': 
undefined reference to 'Tool::Tool()' 

Natürlich enthält myclass.h tool.h, also verstehe ich nicht, warum es nicht gefunden werden kann. Ich habe versucht, einen Zeiger zu verwenden, t als eine Mitgliedsvariable zu deklarieren, aber ich bekomme diesen Fehler immer wieder.

Ich habe versucht, ein minimales Projekt außerhalb meiner mit diesen Klassen zu machen und kompilierte es mit g ++ (Tool und dann MyClass mit einer Hauptfunktion); es funktionierte. Vielleicht ist es ein Problem damit, wie Qt Creator das Kompilieren und Verknüpfen beherrscht. Aber ich weiß nicht, welche Option ich überprüfen soll.

Vielen Dank für Ihre Ideen.

EDIT: Das Problem kam von der Qt Creator-Umgebung. Ich habe MyClass tatsächlich vor dem Tool erstellt, und ohne das Projekt zu kompilieren, ist die Kompilierung fehlgeschlagen, ohne mir mitzuteilen, um welchen Fehler es sich handelt. der wahre Fehler war myMap = new map<string, MyObject*>(); in der Tool-Klasse, also Tool wurde nie kompiliert (wie Jarod42 erwähnt), also der Kompilierfehler für MyClass.

Reinigung und Wiederaufbau wies darauf hin, dass wahre Fehler und erlaubte mir, mein Projekt zu beheben.

+2

'myMap = neue Karte ();' ist ungültig BTW, Sie vergessen zu kompilieren tool.cpp – Jarod42

+0

Sie haben Recht, diese Zeile war ungültig und durcheinander mit dem Kompilierungsprozess, der nicht informiere mich darüber. – Ety

Antwort

2

undefined reference to 'Tool::Tool()' ist eine Linker-Fehlermeldung.

Es bedeutet, dass Ihre cpp-Dateien einzeln erfolgreich kompiliert werden, aber der Linker Tool::Tool() beim Erstellen der Binärdatei nicht finden kann.

Es ist höchstwahrscheinlich ein Problem mit der Projekteinrichtung in Ihrem Build-System.

+0

Es war in der Tat ein Projektproblem: Es musste zuerst gesäubert werden, um mir den Fehler zu zeigen, der im obigen Kommentar erwähnt wurde (in der Werkzeugklasse). Bearbeitete Frage. – Ety