为什么不能在主函数之外访问模板类的静态映射函数?

时间:2019-04-02 00:56:16

标签: c++ templates static global-variables stdmap

我在模板化类中遇到了一个静态映射的奇怪问题。当在主函数中调用映射的成员函数时,它的功能完全符合预期,但是当全局变量在主函数之前调用映射函数时,程序将在执行过程中引发错误。这是我设法创建的最小的示例代码,可复制错误:

#include <map>

template<typename ClassType> struct testStruct {
    static std::map<int, int> testMap;
    testStruct() {
        testMap.count(0);
    }
};
template<typename ClassType> std::map<int, int> testStruct<ClassType>::testMap = {};

testStruct<int> inst;

int main() {
    return 0;
}

该错误显示为:

Exception thrown: read access violation.
std::_Tree_val<std::_Tree_simple_types<std::pair<int const ,int> > >::_Root(...) returned 0x4.

我想了解如何解决此问题。 一些解释它的信息发布在这里: C++ static data members initialization 但这并未说明如何解决该问题。

0 个答案:

没有答案