char
s をカスタム type にマップする静的 std::map メンバー変数を持つクラスがあります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' を初期化できません宣言時に非定数式によって
実装ファイルのマップ割り当て行ごとにこれらのセットを取得します。誰かが私が間違っていることを見ていますか? ご協力いただきありがとうございます。