尝试匹配函数参数无效*和时出错

Getting error trying to match function parametr void*&

本文关键字:出错 无效 参数 函数      更新时间:2023-10-16

我正在尝试使用函数获取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*的函数。在第二个例子中,您将指向GLuint的指针提供给相同的函数。

实现这一点的唯一方法是为GetEnvironmentMap函数提供void*类型的东西(或者可以隐式转换为它的东西)。

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

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

Void*是一个指针,指向一些没有人知道保存什么的内存(它丢失了任何类型信息-"Void==no type")。点击此处阅读更多:指向void 的指针