2011-06-16 46 views
0

我在使用引用其他類的類時收到鏈接器錯誤。LNK2019使用無模板類

1>main.obj : error LNK2019: unresolved external symbol "public: __thiscall MovePattern::~MovePattern(void)" ([email protected]@[email protected]) referenced in function "public: __thiscall Enemy::Enemy(int,int,class MovePattern,char)" ([email protected]@[email protected]@@[email protected]) 
1>main.obj : error LNK2019: unresolved external symbol "public: __thiscall MovePattern::MovePattern(void)" ([email protected]@[email protected]) referenced in function "public: __thiscall Enemy::Enemy(int,int,class MovePattern,char)" ([email protected]@[email protected]@@[email protected]) 

這是從引用這個類:

class MovePattern{ 
    public: 
     char next; 

     MovePattern(); 
     MovePattern(const MovePattern &old){ 
      p = old.p; 
      pi = 0; 
      next = p[0]; 
      n = p[0]; 
     } 

     MovePattern(char *pattern){ 
      p = pattern; 
      pi = 0; 
     next = p[0]; 
     n = p[0]; 
     } 
     ~MovePattern(); 

在這個類:

class Enemy{ 
    public: 
    Enemy(int a, int b, MovePattern p,char c) 
    x = b; 
    y = a; 

    MovePattern pattern (p); 
    symbol = c; 

目前,他們在同一.cpp文件中,並MovePattern高於敵人。

我不知道是怎麼回事就在這裏

的Visual C++ 2010速成一個空白的控制檯項目,我還沒有發現類似我的問題做任何事,任何幫助將將不勝感激。

回答

2

您還沒有定義的默認構造函數和析構函數,如下所示:

MovePattern(); //default constructor 
~MovePattern(); //destructor 

您已經如果聲明他們定義它們。宣言必須有定義。否則,當你使用時,你會得到鏈接器錯誤,無論是隱式還是顯式地使用

2

此鏈接器錯誤是因爲您尚未編譯/鏈接包含默認構造函數(MovePattern::MovePattern())和析構函數(MovePattern::~MovePattern())定義的文件/代碼。

您應聲明它們inlineclass MovePattern裏面(如果你真的不做太多的話):

class MovePattern { 
public: 
    MovePattern() {} 
    ~MovePattern() {} 
}; 

或者在一個單獨的.cpp文件中定義它們,並編譯與文件/文件鏈接您的來源:

// MovePattern.cpp 
MovePattern::MovePattern() 
{ 
    //... 
} 
MovePattern::~MovePattern() 
{ 
    //... 
} 
1

只是刪除這兩個聲明:

MovePattern(); 
~MovePattern(); 

你顯然不需要這些 - 因爲你在一個cpp文件中定義了所有的東西。