起動時に初期化できるようにするために、私のアプリケーションに静的なunordered_mapsがいくつかあります。彼らはクラスの一部ではありません。次のように私の初期設定では、ヘッダーとソースファイルは以下の通りであった。静的なboost :: unordered_mapの初期化
namespace Game
{
namespace Elements
{
enum Element
{
Air = 1,
Dark = 2,
Earth = 4,
Elementless = 8,
Fire = 16,
Ice = 32,
Light = 64,
SpaceTime = 128,
Thunder = 256,
Water = 512,
};
static boost::unordered_map<Element, std::string> ElementNameMap;
static boost::unordered_map<std::string, Element> NameElementMap
}
}
とソースファイル:私はこれをやってみましたび
#include "Elements.h"
using namespace std;
using namespace Game::Elements;
boost::unordered_map<Element, std::string> ElementNameMap = boost::assign::map_list_of
(Element::Air, string("Air"))
(Element::Dark, string("Dark"))
(Element::Earth, string("Earth"))
(Element::Elementless, string("Elementless"))
(Element::Fire, string("Fire"))
(Element::Ice, string("Ice"))
(Element::Light, string("Light"))
(Element::SpaceTime, string("SpaceTime"))
(Element::Thunder, string("Thunder"))
(Element::Water, string("Water"))
;
boost::unordered_map<std::string, Element> NameElementMap = boost::assign::map_list_of
(string("Air"), Element::Air)
(string("Dark"), Element::Dark)
(string("Earth"), Element::Earth)
(string("Elementless"), Element::Elementless)
(string("Fire"), Element::Fire)
(string("Ice"), Element::Ice)
(string("Light"), Element::Light)
(string("SpaceTime"), Element::SpaceTime)
(string("Thunder"), Element::Thunder)
(string("Water"), Element::Water)
;
はしかし、その後、(地図上で検索を実行しようとしましたつまり、Game :: Elements :: NameElementMap [std :: string( "Air")])は常に空文字列を返し、その使用コンテキストのサイズは0です。
初期化をヘッダーファイルに移動しようとしました(つまり、ヘッダファイルには
static boost::unordered_map<Element, std::string> ElementNameMap = boost::assign::map_list_of
(Element::Air, string("Air"))
(Element::Dark, string("Dark"))
(Element::Earth, string("Earth"))
(Element::Elementless, string("Elementless"))
(Element::Fire, string("Fire"))
(Element::Ice, string("Ice"))
(Element::Light, string("Light"))
(Element::SpaceTime, string("SpaceTime"))
(Element::Thunder, string("Thunder"))
(Element::Water, string("Water"))
;
static boost::unordered_map<std::string, Element> NameElementMap = boost::assign::map_list_of
(string("Air"), Element::Air)
(string("Dark"), Element::Dark)
(string("Earth"), Element::Earth)
(string("Elementless"), Element::Elementless)
(string("Fire"), Element::Fire)
(string("Ice"), Element::Ice)
(string("Light"), Element::Light)
(string("SpaceTime"), Element::SpaceTime)
(string("Thunder"), Element::Thunder)
(string("Water"), Element::Water)
;
しかし、コンパイラはデフォルトのコンストラクタがないことに不満を抱いていました。私は間違って何をしていますか?
ありがとうございました
ブースト:: bimap、あなたがここでやっていることのために作られたもの。 http://www.boost.org/doc/libs/1_50_0/libs/bimap/doc/html/index.html – paxos1977