【发布时间】:2013-05-25 10:51:24
【问题描述】:
我正在做一些个人的事情,作为课堂练习。作为背景,我基本上只是想为棋盘游戏的玩家创建一个类,根据使用他们的统计数据进行一些简单的计算来跟踪他们的回合顺序。
我的 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;
}
现在我的错误出现在字符串名称参数中。它似乎将名称定义为类型,而不是变量,并说我不允许使用类型名称。
编辑 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;
}
【问题讨论】:
-
but I don't appear to have done the things that caused their errors, as my code is very simple你没有实现这个方法,是吗? -
编辑更新:您应该使用构造函数初始化列表来初始化您的成员。
-
我发现这是一种更简洁、更紧凑的方法,但它不能解决我的错误。
标签: c++ types external symbols