我正在一個VS2010C++控制檯應用程序,並創建了一個管理器類,其中包含靜態和動態對象相同類型(事)其中之一是一個向量。無法解析的外部C++,默認的構造函數
我最初在管理器類的構造函數中遇到了一個錯誤,指出它所組成的類沒有默認構造函數(但它不應該有默認構造函數,因爲對象需要在運行時實例化,並且用運行時輸入的信息)我最終爲持有的類創建了一個默認構造函數(它什麼都不做),然後我就能夠繼續。
然後,我就用我需要爲程序的所有功能做了,我也得到了一大堆LNK2019的「一些事情無法解析的外部符號治法在functionB引用。
第一爲什麼我需要一個默認的構造函數如果我需要它在運行時完成的託管類?
秒我該如何擺脫這些LNK2019?(所有這些方法都在標頭中內聯標記,並且僅在其中引用或從管理員類,並且沒有命名衝突),作爲一個小紙條,它可能與必須混合訪問修飾符(對於靜態成員)和 - >(對於動態成員)有關係?
編輯: 能夠通過限制其需要一個單一的方法,並修改其它靜態爲動態
鏈接器錯誤擺脫默認構造函數:在Thing.h
class Thing{
public : int ** Array;
public : int size;
public : Point pi;
public : SinglyLinkedList * moves;
...
public :inline bool operator==(const Thing * _thing);
...
};
Thing.cpp
bool Thing::operator==(const Thing * _Thing){
for(int ii = 0; ii < m; ii++){
for(int jj = 0; jj < m; jj++){
if(Array[ii][jj] != _Thing->Array[ii][jj]){
return false;
}
}
}
return true;
}
ThingMgr.h
class ThingMgr {
public : Thing * control;
public : Thing * Current;
public : Thing * previous;
public : int size;
的main.cpp
int _tmain{
...
ThingMgr * TestTings= new ThingMgr(num);
...
if(testThings->control->operator==(testThings->Current)){ // pretty sure its here as it is not called anywhere else in the function.
...
}
錯誤
1>Project_1.obj : error LNK2019: unresolved external symbol "public: bool __thiscall Thing::operator==(class Thing const *)" ([email protected]@[email protected]@Z) referenced in function _wmain
我認爲這可能是需要把括號,但隨後VS大叫大約期待一個成員。還有其他的功能,但是如果我能夠弄清楚這裏發生了什麼,那麼這些應該是可以修復的。
注意我知道它不是通用的C++約定來識別所有成員的訪問修飾符,但我已經使用了4種不同的c/C++編譯器,並且沒有人曾經抱怨過,或者從中引發任何問題 – gardian06 2012-03-07 03:15:41
鏈接問題是你承諾在頭文件中定義運算符,說它是「inline」,但是你只在實現文件中定義它。只需刪除內聯。 – 2012-03-07 08:35:28