首页 文章

类的未解决的外部符号?

提问于
浏览
0

我正在做一些个人作为课堂练习 . 作为背景,我基本上只想为棋盘游戏的玩家制作一个类,根据一些使用他们的统计数据的简单计算来跟踪他们的回合顺序 .

我的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函数_main中引用了?$ basic_string @ DU?$ char_traits @ D @ std @@ V?$ allocator @ D @ 2 @@ std @@ HHHH @ Z)

我正在使用Visual Studio 2012.据我所知,它正在解决构造函数调用的语法问题,尽管我认为它是正确的 .

谁能帮我吗?我通过“外部符号”错误查看了其他线程,但我似乎没有完成导致错误的事情,因为我的代码非常简单 .

谢谢!

EDIT: 新错误 . 我已经更改了类中私有成员的名称,以便更容易识别(例如mDex) . 所以我有以下内容:

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

现在我的错误在字符串名称参数中 . 它似乎将name定义为类型,而不是变量,并且说我不允许使用类型名称 .

EDIT 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;
}

1 回答

  • 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)
    {}
    

    否则,编译器无法找到构造函数的定义 .

相关问题