C++ 尝试匹配函数参数void*&;时出错;

C++ 尝试匹配函数参数void*&;时出错;,c++,opengl,openscenegraph,C++,Opengl,Openscenegraph,我正在尝试使用函数获取EnvironmentMap bool SILVERLINING_API GetEnvironmentMap(void *&texture, int facesToRender = 6); 我正在使用OpenSceneGraph,它是OpenGL上的API。功能描述说明如下: \param texture指向包含立方体贴图的平台特定纹理句柄的指针。在OpenGL上,这是一个GLuint;在DirectX9上,它是LPDIRECT3DCUBETEXTURE9;在Di

我正在尝试使用函数获取EnvironmentMap

bool SILVERLINING_API GetEnvironmentMap(void *&texture, int facesToRender = 6);
我正在使用OpenSceneGraph,它是OpenGL上的API。功能描述说明如下:

\param texture指向包含立方体贴图的平台特定纹理句柄的指针。在OpenGL上,这是一个GLuint;在DirectX9上,它是LPDIRECT3DCUBETEXTURE9;在DirectX10上,它是ID3D10ShaderResourceView*;在DirectX11上,它是ID3D11ShaderResourceView*

所以我尝试这样的代码:

GLuint id;
silverLining->atmosphere()->GetEnvironmentMap(id);
我得到一个错误:“无法将参数1从'GLuint'转换为'void*&'” 同样的情况也在发生

GLuint *id;
silverLining->atmosphere()->GetEnvironmentMap(id);
所以我想当我和描述一起做的时候,它不起作用,也许有一些特殊的方法来处理参数,比如“void*&”


有什么建议吗?

C++是强类型语言,因此必须匹配类型。在第一次尝试中,将GLuint类型的对象提供给一个取void*的function。在第二个示例中,为同一个函数提供指向GLuint的指针

实现此功能的唯一方法是为GetEnvironmentMap函数提供void*类型的内容(或者可以隐式转换为该类型的内容)

编辑: 若您使用的是OpenGL,GetEnvironmentMap函数将乐意接受指向GLuint的指针作为第一个参数,但它必须被强制转换(void*),并且必须有效。 可能对您有帮助的代码是

GLuint myEnvironmentMapTex;
silverLining->atmosphere()->GetEnvironmentMap((void*)&myEnvironmentMapTex);

Void*是一个指针,指向一些没有人知道保存什么的内存(它释放任何类型信息-'Void==no type')。请在此阅读更多信息:

您能告诉我这是什么“void*”吗?据我所知,这是早期的事情,现在有点超负荷的模板,不是吗?我如何创建void*类型的对象?@user3092979:您没有创建
void
类型的对象,这正是重点。当你第二次使用
void
指针时,你就失去了它指向什么类型的东西的所有信息。这只是一个最纯粹意义上的地址。最终,您必须将其转换为其他内容,以使地址在大多数上下文中都有用,但传递
void*
是一种编写可以接受指向任何内容的指针的函数的方法。你基本上是说你不在乎它指向什么,你只是想要一个地址,你以后会明白它的意思。非常感谢。找到了一个解决方案,如下所示:
GLuint myEnvironmentMapTex;void*ptr=&myEnvironmentMapTex;银线->大气()->GetEnvironmentMap(ptr)看起来与给出的答案几乎相同,但这不起作用<代码>silverLining->atmosphere()->GetEnvironmentMap((void*)和myEnvironmentMapTex)我想知道有什么区别?