Неразрешенный внешний символ для класса?

Я работаю над чем-то личным, как упражнение с классами. В качестве фона я просто хочу создать класс для игроков в настольную игру, чтобы отслеживать порядок их ходов, основываясь на некоторых простых вычислениях с использованием их статистики.

Мой класс 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.

Ошибка, которую выдает компилятор, именно такова:

Initiative.obj: ошибка LNK2019: неразрешенный внешний символ «public: __thiscall Player :: Player (класс std :: basic_string, класс 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;
}

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

В противном случае компилятор не сможет найти определение вашего конструктора.

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]