我正在使用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的編譯錯誤。
清潔和重建指出,真正的錯誤,並允許我解決我的項目。
'myMap = new map();'無效順便說一句,你忘了編譯tool.cpp –
Jarod42
你是對的,那一行是無效的,並且與編譯過程搞砸了,通知我。 – Ety