我正在阅读一本看似很受欢迎的书,名为“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 * 类型的参数不兼容
转换出了什么问题?为什么 esContext->userData 会出现问题?
示例代码是用 C 语言提供的。我正在尝试用 C++ 进行编译,但我不知道这到底是如何影响它的(如果是的话)。
谁能给我一些指导吗?这里是否有一个C++不支持的C组件?是否有某种 C++ 组件导致了错误?
感谢您的帮助!完整示例代码可见here
最佳答案
C 和 C++ 之间的主要不兼容性之一是类型转换。
特别是,在 C 中,您可以自由地将 void*
转换为任何其他指针类型,而无需进行强制转换。这种自由在 C++ 中不存在:您需要进行强制转换才能将 void*
转换为其他任何内容。
关于c++ - OpenGL ES 2.0 在 C++ 中共享 esContext,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16930261/