我正在与C++的Laurena库一起工作,将序列化添加到JSON中以添加到我的Node Addon中。当我初始化库时,它会在代码中定义两个unordered_map对象的特定点。他们没有初始化,而是立即使用(如下面的代码)。对unordered_maps内的任何数据或任何方法的任何访问都会导致向量下标超出范围失败。不支持NodeJS Addon Unordered_map?
但仅限于nodejs。
如果我拉取插件代码并将其转储到Visual Studio 2013 C++控制台应用程序中,但没有任何更改,它将完美运行。任何人都可以向我指出这些unodered_maps的方向,它在常规控制台应用程序中的节点中不受支持?
using namespace laurena;
std::unordered_map<std::string, const descriptor*> classes::_classes_by_name;
std::unordered_map<size_t, const descriptor*> classes::_classes_by_typeid;
void classes::add(const descriptor* myClass)
{
for(int i = 0; i< _classes_by_typeid.size(); i++)
{
printf("in array I (%d) : %Iu", i, _classes_by_typeid[i]); //FAILS!
}
// also failes
printf("Access ANYTHING? %s \n", _classes_by_typeid.hash_function());
// Doesn't fail? WTF??
printf("Post Set array size :: %d\n", _classes_by_name.size());
printf("Post Set array size :: %d\n", _classes_by_typeid.size());
}
可能是C++ 11中的一部分whis是unordere_map。检查你的node.js插件编译器是否支持C++ 11。 – teivaz 2014-09-29 16:54:13
它使用node-gyp,根据项目所说的使用msbuild。该项目目前设置为使用Visual Studio 2013.据我所知,自2012年以来支持C++ 11 – TheNerd 2014-09-29 17:26:09
我想这里的问题是由具有不平凡构造函数的静态成员造成的。它应该被初始化,显然它没有。尝试手动初始化它们。 – teivaz 2014-09-29 18:39:35