Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/152.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 将映射结构强制转换为无效指针和取消引用_C++_Dictionary_Casting_Void Pointers_Dereference - Fatal编程技术网

C++ 将映射结构强制转换为无效指针和取消引用

C++ 将映射结构强制转换为无效指针和取消引用,c++,dictionary,casting,void-pointers,dereference,C++,Dictionary,Casting,Void Pointers,Dereference,我一直在尝试将映射结构转换为空指针,反之亦然 void addToMap(void *data){ // add some elements to the map } map<string, vector<myStruct> > myMap; addToMap(&myMap); void addToMap(void*数据){ //向地图添加一些元素 } 地图我的地图; addToMap(&myMap); 我试图将myMap作为参数发送到addToMap函数,

我一直在尝试将映射结构转换为空指针,反之亦然

void addToMap(void *data){
// add some elements to the map
}

map<string, vector<myStruct> > myMap;
addToMap(&myMap);
void addToMap(void*数据){
//向地图添加一些元素
}
地图我的地图;
addToMap(&myMap);
我试图将myMap作为参数发送到addToMap函数,并在函数中添加一些元素。如何将void参数返回到贴图结构

我知道static_cast可以用来取消对void类型的引用以了解类型。例如:

int* a = new int();
void* b = static_cast<void*>(a);
int* c = static_cast<int*>(b);
int*a=newint();
void*b=静态铸件(a);
int*c=静态(b);
上面的代码片段可以工作,但我想在这种情况下不行。我已经在我的案例中尝试过了,可能还有另一个技巧。

在addToMap函数中,您可以将void指针转换回原始类型:

void addToMap(void *data){
    auto pmap = static_cast<map<string, vector<myStruct> >*>(data);
    pmap->insert(...);
}
void addToMap(void*数据){
自动pmap=静态施法(数据);
pmap->插入(…);
}
静态_cast还能够执行隐式允许的所有转换 (不仅是那些带有类指针的),而且还能够执行 与此相反。它可以:

从void*转换为任意指针类型。在这种情况下,它保证如果void*值是通过从 如果指针类型相同,则生成的指针值相同


这不是C,也许是C++,我在C++中构建了一个项目,但是我使用了一些C库,而空虚参数的函数来自这些库。难道你不能简单地把它重新映射到你的地图类型吗?请使用你正在编写的语言的标签。(问题实际涉及的语言和答案应使用的语言)。您可能正在使用的任何库的语言可能在很大程度上都是无关的。此外,请详细说明“不起作用”。这是一个编译器错误,一个运行时错误,正在发射导弹吗?错误:“pmap”没有命名类型。试图在Ubuntu上用Eclipse进行编译。@serhatg这段代码是有效的。你使用的是哪种编译器?@Quentin以前我用过Cross g++,我只是用GNU g++4.6.3进行了尝试。同样的错误仍然存在。@serhatg你应该提到它t在您的问题中使用的是C++03编译器。请将
auto
替换为显式类型的指针:)