2012-03-07 94 views
0

我正在一個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大叫大約期待一個成員。還有其他的功能,但是如果我能夠弄清楚這裏發生了什麼,那麼這些應該是可以修復的。

+0

注意我知道它不是通用的C++約定來識別所有成員的訪問修飾符,但我已經使用了4種不同的c/C++編譯器,並且沒有人曾經抱怨過,或者從中引發任何問題 – gardian06 2012-03-07 03:15:41

+1

鏈接問題是你承諾在頭文件中定義運算符,說它是「inline」,但是你只在實現文件中定義它。只需刪除內聯。 – 2012-03-07 08:35:28

回答

1

這將有助於查看代碼。從它的聲音中,你創建一個std::vector<T>與你輸入一些非零大小的類型:std::vector<T>需要初始化對象,你顯然沒有給它一個它可以複製的對象。您可能要創建一個空的std::vector<T>和使用push_back()你很容易構建對象(或emplace()他們,如果你有一個C++ 2011系統)

對於連接錯誤:你顯然沒有定義的某些功能,您正在使用。這些確切無法用您給出的模糊描述來說明。您需要提供更多詳細信息,例如確切鏈接錯誤連同假定的實現。

+0

爲問題添加了示例 – gardian06 2012-03-07 03:13:57