我正在看一本看似流行的书,标题为“ ES 2.0编程指南”。本书提供了用于绘制三角形的简单ES 2.0程序的示例代码。这是给我编译问题的程序片段:
int Init ( ESContext *esContext )
{
UserData *userData = esContext->userData;
//etc... rest of the function
}
当我尝试编译时,此处的第3行给出错误C2440:无法将void *转换为UserData *
我怀疑程序中稍后可能存在一些错误,可能与之有关:
// Load the vertex/fragment shaders
vertexShader = LoadShader ( GL_VERTEX_SHADER, vShaderStr );
fragmentShader = LoadShader ( GL_FRAGMENT_SHADER, fShaderStr );
在这里,编译器存在vShaderStr和fShaderStr的问题:GLbyte *与const char类型的param不兼容
转换出了什么问题?为什么esContext-> userData出现问题?
示例代码用C表示。我正在尝试用C ++进行编译,但是我看不出它是如何影响它的。
谁能给我一些指导?这里有C ++不支持的C组件吗?是否存在某种导致错误的C ++组件?
谢谢你的帮助!完整的示例代码可见here
最佳答案
C和C ++之间的主要不兼容性之一是类型转换。
特别是在C语言中,您可以将void*
自由转换为任何其他指针类型,而无需强制转换。这种自由在C ++中不存在:您需要强制转换以将void*
转换为其他任何东西。