アプリケーションに静的なunordered_mapsがいくつかあり、起動時に初期化できるようにしたいと考えています。それらはクラスの一部ではありません。私の初期設定では、ヘッダーとソースファイルは次のとおりでした。
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)
;
しかし、コンパイラーはデフォルトのコンストラクターがないことについて不平を言いました。私は何が間違っているのですか?
前もって感謝します