У меня есть класс со статической переменной-членом std :: map, который сопоставляет char
s с пользовательским типом Terrain
. Я пытаюсь заполнить эту карту в файле реализации класса, но получаю несколько ошибок. Вот мой заголовочный файл:
#ifndef LEVEL_HPP
#define LEVEL_HPP
#include <bitset>
#include <list>
#include <map>
#include <string>
#include <vector>
#include "libtcod.hpp"
namespace yarl
{
namespace level
{
class Terrain
{
// Member Variables
private:
std::bitset<5> flags;
// Member Functions
public:
explicit Terrain(const std::string& flg)
: flags(flg) {}
(...)
};
class Level
{
private:
static std::map<char, Terrain> terrainTypes;
(...)
};
}
}
#endif
и вот мой файл реализации:
#include <bitset>
#include <list>
#include <map>
#include <string>
#include <vector>
#include "Level.hpp"
#include "libtcod.hpp"
using namespace std;
namespace yarl
{
namespace level
{
/* fill Level::terrainTypes */
map<char,Terrain> Level::terrainTypes['.'] = Terrain("00001"); // clear
map<char,Terrain> Level::terrainTypes[','] = Terrain("00001"); // clear
map<char,Terrain> Level::terrainTypes['\''] = Terrain("00001"); // clear
map<char,Terrain> Level::terrainTypes['`'] = Terrain("00001"); // clear
map<char,Terrain> Level::terrainTypes[178] = Terrain("11111"); // wall
(...)
}
}
Я использую g ++, и я получаю следующие ошибки:
src / Level.cpp: 15: ошибка: конфликтующее объявление ‘std :: map, std :: allocator>> yarl :: level :: Level :: terrainTypes [46]’
src / Level.hpp: 104: ошибка: «yarl :: level :: Level :: terrainTypes» имеет предыдущее объявление как «std :: map, std :: allocator>> yarl :: level :: Level :: terrainTypes»
src / Level.cpp: 15: ошибка: объявление ‘std :: map, std :: allocator>> yarl :: level :: Level :: terrainTypes 'вне класса не является определением
src / Level.cpp: 15: ошибка: преобразование из «yarl :: level :: Terrain» в нескалярный тип «std :: map, std :: allocator>>» запрашивается
src / Level.cpp: 15: ошибка: «yarl :: level :: Level :: terrainTypes» не может быть инициализирован с помощью неконстантного выражения при объявлении
Я получаю набор из них для каждой строки назначения карты в файле реализации. Кто-нибудь видит, что я делаю не так? Спасибо за вашу помощь.