2013-05-30 97 views
0

我正在做一些與課程有關的個人練習。作爲背景,我基本上只想爲一款棋盤遊戲的玩家制作一個課程,根據他們的統計數據進行一些簡單的計算,從而跟蹤他們的回合順序。類未解析的外部符號?

我的播放器類包括此構造線:

Player(string name, int Dex, int Mod, int Lvl, int diceRoll); 

其私人數據如下:

int Dex, Mod, Lvl; 
string name; 

在我的主要功能我有以下的,並且已經包括了iostream和串庫。

int rollD; //Will be input by the user 
Player Derek("Derek", 2, 0, 6, rollD); 
//... etc. 

編譯器引發錯誤恰恰是這樣的:

Initiative.obj:錯誤LNK2019:無法解析的外部符號「公用:__thiscall球員::播放器(類的std :: basic_string的,一流的std ::分配器>,INT,INT,INT,INT)」(?? 0Player @@ @ QAE V'$ basic_string的@ DU?$ char_traits @ d @ @@ STD V'$分配器@ d @ @@ 2 STD @@ @ HHHH Z)的函數引用_main

我使用Visual Studio 2012年從我可以告訴,它採取問題,我的構造函數調用的語法,但我相信這是正確的。

任何人都可以幫我嗎?我已經通過其他線程看過「外部符號」的錯誤,但我似乎沒有做過導致錯誤的事情,因爲我的代碼非常簡單。

謝謝!

編輯:新的錯誤。我已經更改了班級中我的私人成員的名字,以便更容易識別(例如,mDex)。所以我有以下幾點:

Player::Player(string name, int Dex, int Mod, int Lvl, int diceRoll) { 
       mName = name; 
     mDex = Dex; 
     mMod = Mod; 
     mLvl = Lvl; 
} 

現在我的錯誤是在字符串名稱參數。它似乎將名稱定義爲類型,而不是變量,並說我不允許使用類型名稱。

編輯2:下面完整代碼。

#include <iostream> 
#include <string> 

using namespace std; 

class Player { 
    public: 
Player(string name, int Dex, int Mod, int Lvl, int diceRoll); 

int calcInitiative(int Dex, int Mod, int Lvl); 
int sortInitiative(int Init); 

int diceRoll; 

    private: 

    int mDex, mMod, mLvl; 
    string mName; 
}; 

int main() { 
int rollD; //To be given by the user later. 

Player::Player(string name, int Dex, int Mod, int Lvl, int diceRoll) { 
mName(name), mDex(Dex), mMod(Mod), mLvl(Lvl); 
} 

Player Derek("Derek", 2, 0, 6, rollD); 

return 0; 
} 
+3

'但是我似乎沒有這樣做,是造成他們的錯誤的東西,因爲我的代碼是非常simple'你沒有實現的方法,是嗎?的 –

+0

可能重複[什麼是未定義參考/解析的外部符號錯誤,以及如何解決呢?(http://stackoverflow.com/questions/12573816/what-is-an-undefined-reference-unresolved-external- symbol-error-and-how-do-i-fix) – chris

+0

使用編輯進行更新:您應該使用構造函數初始化程序列表來初始化您的成員。 – chris

回答

2

您必須實現Player的構造函數。

定義內部類:

class Player{ 
    //...other stuff 
    Player(string name, int Dex, int Mod, int Lvl, int diceRoll): 
      name_(name), Dex_(Dex), Mod_(Mod), Lv1_(Lv1), diceRoll_(diceRoll){} 
}; 
//^^^Assume name_ and others are your member variables 

定義外類:

Player::Player(string name, int Dex, int Mod, int Lvl, int diceRoll): 
      name_(name), Dex_(Dex), Mod_(Mod), Lv1_(Lv1), diceRoll_(diceRoll) 
{} 

否則,編譯器無法找到你的構造函數的定義。

+0

Ooohhh,傻我!對,如果我沒有在類之外實現構造函數,當然它不會被定義爲主函數。謝謝! –

+0

@ user2395694是的,請注意,可以定義內部類。 – taocp

+0

呵呵。現在它告訴我在我的外部類函數定義中,我不允許使用「類型名稱」。 我有作爲參數的構造函數 字符串名稱 那麼,爲什麼它給了我這個錯誤? –