Я работаю над чем-то личным, как упражнение с занятиями. В качестве фона я просто хочу сделать класс для игроков настольной игры, чтобы отслеживать порядок их поворотов, основываясь на некоторых простых вычислениях, используя их статистику.Неразрешенный внешний символ для класса?
классМой плеер включает в себя этот конструктор строку:
Player(string name, int Dex, int Mod, int Lvl, int diceRoll);
Его личные данные следующим образом:
int Dex, Mod, Lvl;
string name;
У меня есть следующие в моей основной функции, и включили iostream и строковых библиотек ,
int rollD; //Will be input by the user
Player Derek("Derek", 2, 0, 6, rollD);
//... etc.
ошибка, что компилятор бросает именно это:
Initiative.obj: ошибка LNK2019: неразрешенный внешний символ «общественность: __thiscall игрока :: (класс станд :: basic_string, класс станд :: 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. Из того, что я могу сказать, это проблема с синтаксисом моего вызова конструктора, хотя я считаю, что это правильно.
Может ли кто-нибудь помочь мне? Я просмотрел другие потоки с ошибками «External Symbol», но, похоже, я не делал то, что вызывало их ошибки, так как мой код очень прост.
Спасибо!
EDIT: Новая ошибка. Я изменил имя своих частных членов в классе, чтобы быть более легко идентифицируемым (например, mDex). Поэтому у меня есть следующее:
Player::Player(string name, int Dex, int Mod, int Lvl, int diceRoll) {
mName = name;
mDex = Dex;
mMod = Mod;
mLvl = Lvl;
}
Теперь моя ошибка в параметре имени строки. Кажется, он определяет имя как тип, а не переменную, и говорит, что мне не разрешено использовать имя типа.
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;
}
'но я, кажется, не сделал то, что вызвало их ошибки, так как мой код очень прост, вы не реализовали этот метод, не так ли? –
Возможный дубликат [Что такое неопределенная ссылка/неразрешенная ошибка внешнего символа и как ее исправить?] (Http://stackoverflow.com/questions/12573816/what-is-an-undefined-reference-unresolved-external- symbol-error-and-how-do-i-fix) – chris
Обновление с помощью редактирования: вы должны использовать списки инициализатора конструктора для инициализации своих членов. – chris