Что является причиной моей ошибки? Я пытаюсь создать класс игрока и сохранить имя игрока в качестве переменной

здесь еще один нуб, так что я надеюсь, что кто-то с немного здравым смыслом поможет мне! Как говорится в моем вопросе, я просто пытаюсь создать класс игрока (это для RPG-игры). Тем не менее, я попробовал несколько способов сделать это, с показанным кодом, являющимся последним, однако я продолжаю сталкиваться с различными ошибками. Я использую Microsoft Visual C ++ 2010 Express и ошибка, с которой я сталкиваюсь в настоящее время:

1> player.obj: ошибка LNK2001: неразрешенный внешний символ «private:
статический класс std :: basic_string, класс std :: allocator>
Игрок :: m_playerName «(? M_playerName @ плеер @@ 0В? $ Basic_string @ DU? $ Char_traits @ D @ станд @@ V? $ Распределитель @ D @ 2 @@ станд @@ A)

Я надеюсь, что это достаточно подробно! Остальной код / ​​файлы, которые я создал, таковы:

game.cpp

#include <iostream>
#include "player.h"
using namespace std;int main()
{

Player main;main.setStats();
main.showStats();int stopper;
cin >> stopper;

return 0;}

player.h

#include <string>

class Player
{
public:

Player();
void showStats();
void setStats();private:

int m_playerLVL;
static std::string m_playerName;
};

player.cpp

#include "player.h"#include <iostream>
#include <string>

using namespace std;

Player::Player()
{
cout << "Please enter your name: ";
string playerName;
getline (cin, playerName);
m_playerName = playerName;
}

void Player::showStats()
{
cout << "Hello, i am " << m_playerName << "and i am lvl " << m_playerLVL;
}

void Player::setStats()
{
m_playerLVL = 1;
}

1

Решение

Вы объявляете имя игрока static:

static std::string m_playerName; // DON'T MAKE IT STATIC!

Это семантически неверно, и удаление static случается, чтобы решить вашу проблему. Каждый экземпляр Player следует связать другое значение с m_playerName (потому что у каждого игрока есть свое имя). Объявление члена данных static делает его глобальным для всего Player класс (т. е. ему присваивается не значение для каждого экземпляра, а одно глобальное значение, одинаковое для всех Player объекты). Это не похоже на то, что вы хотели бы.


Теперь, если по какой-либо причине вы действительно хотел объявить это как static член данных, то вы должны предоставить определение для него в глобальной области имен пространства:

std::string Player::m_playerName;

Линкер жалуется на отсутствие такого определения.

1

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

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

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