здесь еще один нуб, так что я надеюсь, что кто-то с немного здравым смыслом поможет мне! Как говорится в моем вопросе, я просто пытаюсь создать класс игрока (это для 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;
}
Вы объявляете имя игрока static
:
static std::string m_playerName; // DON'T MAKE IT STATIC!
Это семантически неверно, и удаление static
случается, чтобы решить вашу проблему. Каждый экземпляр Player
следует связать другое значение с m_playerName
(потому что у каждого игрока есть свое имя). Объявление члена данных static
делает его глобальным для всего Player
класс (т. е. ему присваивается не значение для каждого экземпляра, а одно глобальное значение, одинаковое для всех Player
объекты). Это не похоже на то, что вы хотели бы.
Теперь, если по какой-либо причине вы действительно хотел объявить это как static
член данных, то вы должны предоставить определение для него в глобальной области имен пространства:
std::string Player::m_playerName;
Линкер жалуется на отсутствие такого определения.
Других решений пока нет …