我在头文件中声明了一个静态无序映射,如下所示:

static boost::unordered_map<KeyAction, sf::Key::Code> WindowKeyMap;

在相同的头文件中,我有一个函数,用一些值填充 map :
static void Initialize(std::string &file)
{
    WindowKeyMap[MoveLeft] = sf::Key::Code::Left;
    WindowKeyMap[MoveRight] = sf::Key::Code::Right;
    WindowKeyMap[MoveUp] = sf::Key::Code::Up;
    WindowKeyMap[MoveDown] = sf::Key::Code::Down;
    std::cout << std::endl << WindowKeyMap.size() << std::endl;
}

稍后在我的程序中,在单独的类/函数中,我尝试读取以下值之一:
std::cout << std::endl << WindowKeyMap.size() << std::endl;
auto test2 = WindowKeyMap[MoveRight];

但是 map 始终是空的。从初始化例程到控制台的输出始终为4,然后从第二个cout输出为0。我以为静态映射在整个程序中是持久的,所以我对静态映射的使用方式有些困惑,因为它是空的。谁能阐明一些想法?

谢谢

最佳答案

当您在 header 中声明变量时,每个编译单元(* .cpp)都会获得它自己的本地静态副本。您必须声明它extern

extern boost::unordered_map<KeyAction, sf::Key::Code> WindowKeyMap;

并放在一个cpp中
boost::unordered_map<KeyAction, sf::Key::Code> WindowKeyMap;

09-06 07:33