0

我正在阅读一本看似很受欢迎的书,名为“ES 2.0 Programming Guide”。在本书中,有一个用于绘制三角形的简单 ES 2.0 程序的示例代码。这是给我编译问题的程序片段:

int Init ( ESContext *esContext )
{
   UserData *userData = esContext->userData;
    //etc... rest of the function
}

当我尝试编译时,此处的第 3 行给出错误 C2440: cannot convert void * to UserData *

程序后面有几个错误,我怀疑可能与此有关:

   // Load the vertex/fragment shaders
   vertexShader = LoadShader ( GL_VERTEX_SHADER, vShaderStr );
   fragmentShader = LoadShader ( GL_FRAGMENT_SHADER, fShaderStr );

在这里,编译器对 vShaderStr 和 fShaderStr 有问题:GLbyte * is incompatible with param of type const char *

转换出了什么问题?为什么 esContext->userData 会出现问题?

示例代码以 C 语言提供。我正在尝试用 C++ 进行编译,但我不知道这究竟是如何影响它的,如果是的话。

谁能给我一些指导?这里是否有 C++ 不支持的 C 组件?是否有某种 C++ 组件会产生错误?

谢谢你的帮助!完整的示例代码可以在这里查看

4

1 回答 1

0

C 和 C++ 之间的主要不兼容性之一是类型转换。

特别是,在 C 中,您可以自由地将 a 转换void*为任何其他指针类型,而无需强制转换。这种自由在 C++ 中不存在:您需要强制转换才能将 a 转换void*为其他任何东西。

于 2013-06-04T14:14:00.880 回答