类的未解析外部符号

Unresolved External Symbol for Class?

本文关键字:外部 符号      更新时间:2023-10-16

我正在做一些个人的事情作为课堂练习。作为背景,我基本上只是想为棋盘游戏的玩家创造一个类,基于使用他们的状态进行一些简单的计算来跟踪他们的回合顺序。

我的Player类包含以下构造函数行:

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

它的私有数据如下:

int Dex, Mod, Lvl;
string name;

在我的主函数中有以下代码,并包含了iostream和string库。

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

编译器抛出的错误是:

倡议。obj:错误LNK2019:未解析的外部符号"public: __thiscall Player::Player(类std::basic_string,类std::allocator>,int,int,int)"(??0Player@@QAE@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@HHHH@Z)参考函数_main

我使用的是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定义为类型,而不是变量,并说我不允许使用类型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;
}

您必须实现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)
{}

否则,编译器找不到构造函数的定义。