我有一个带有静态 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]'<br> src/Level.hpp:104: 错误: 'yarl::level::Level::terrainTypes' 之前的声明为 'std::map, std::allocator >> yarl::level::Level::terrainTypes'<br> 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' 无法初始化声明时由非常量表达式
我为实现文件中的每个地图分配行获得了一组这些。有人看到我做错了什么吗?谢谢你的帮助。