我正在做个人的事情,作为课堂练习。作为背景,我基本上只想为棋盘游戏的玩家制作一个类,根据他们的统计数据进行一些简单的计算来跟踪他们的回合顺序。
我的Player类包含以下构造函数:
Player(string name, int Dex, int Mod, int Lvl, int diceRoll);
其私人数据如下:
int Dex, Mod, Lvl;
string name;
我在main函数中有以下内容,并包含了iostream和字符串库。
int rollD; //Will be input by the user
Player Derek("Derek", 2, 0, 6, rollD);
//... etc.
编译器抛出的错误就是这样:
Initiative.obj:错误LNK2019:未解析的外部符号“public:__thiscall Player :: Player(class std :: basic_string,class std :: allocator>,int,int,int,int)”(?? 0Player @ @ QAE @ V?$ basic_string @ DU?$ char_traits @ D @ std @@ V?$ allocator @ 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;
}
现在我的错误在字符串名称参数中。它似乎将name定义为类型,而不是变量,并且说我不允许使用类型名称。
编辑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;
}
答案 0 :(得分: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)
{}
否则,编译器找不到构造函数的定义。