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