我正在看一本看似流行的书,标题为“ 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*转换为其他任何东西。

10-07 13:37