2016-07-25 174 views
0

我正在使用Qt Creator開發項目。對構造函數中的默認構造函數的未定義引用

比方說,我有一個簡單的工具類:

#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 

有一個默認的構造是這樣的:

#include "tool.h" 

using namespace std; 

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

然後我想使用的類在另一個類的構造函數:

#include "myclass.h" 

using namespace std; 

MyClass::MyClass() 
{ 
    Tool t; 
} 

但我得到以下編譯錯誤:

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

自然,myclass.h包含tool.h,所以我不明白爲什麼找不到它。我嘗試使用一個指針,將t聲明爲一個成員變量,但我不斷收到此錯誤。

我試圖在這個類之外使用這些類創建一個最小的項目,並使用g ++(Tool和MyClass以及一個主函數)編譯它;有效。 所以也許這是Qt Creator如何處理編譯和鏈接的問題?但我不知道要檢查哪個選項。

謝謝你的任何想法。

編輯:問題來自Qt Creator環境。我實際上在Tool之前創建了MyClass,沒有清除項目編譯失敗,沒有告訴我錯誤是什麼; Tool類中的真實錯誤是myMap = new map<string, MyObject*>();,所以Tool從未編譯(如Jarod42提到的),因此MyClass的編譯錯誤。

清潔和重建指出,真正的錯誤,並允許我解決我的項目。

+2

'myMap = new map ();'無效順便說一句,你忘了編譯tool.cpp – Jarod42

+0

你是對的,那一行是無效的,並且與編譯過程搞砸了,通知我。 – Ety

回答

2

undefined reference to 'Tool::Tool()'是一個鏈接器錯誤消息。

這意味着您的cpp文件單獨成功編譯,但鏈接器在創建二進制文件時找不到Tool::Tool()

這很可能是您的構建系統中的項目設置問題。

+0

這確實是一個項目問題:必須首先清理它才能向我顯示上面評論中提到的錯誤(在工具類中)。編輯的問題。 – Ety