c++ - 将指针传递给结构

标签 c++

我习惯用 ASM 编写代码,并且需要为某些 OpenGL 项目切换到 C++。无论如何,我得到了以下程序:

glGenBuffers(Size, PointerToBuff);

据我了解,根据 Size 参数(缓冲区数量)的句柄将存储在 PointerToBuff 上。所以我想使用一个结构来保存我将获得的 2 个句柄,以防我使用:

glGenBuffers(2, *PointerToBuff);

所以我创建了一个结构:

struct VertexHandlers
{
    GLuint cubevertex;
    GLuint trianglevertex;
}VBHandlers;

然后像这样使用过程:

glGenBuffers(2, &VBHandlers);

我得到的错误:

error C2664: 'void (GLsizei,GLuint *)' : cannot convert parameter 2 from 'main::VertexHandlers *' to 'GLuint *'
2>          Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast
2>C:\Documents and Settings\Owner\My Documents\Downloads\OpenGL-tutorial_v0003\playground\playground.cpp(181): error C2664: 'void (GLsizei,GLuint *)' : cannot convert parameter 1 from 'main::VertexHandlers *' to 'GLsizei'
2>          There is no context in which this conversion is possible

我不习惯“类型转换”,几乎什么都不知道,但是当涉及到指针时,我认为 (&) 运算符将获取创建的局部变量的地址。希望我能得到一些帮助,谢谢。

最佳答案

glGenBuffers() 需要一个 GLuint 数组,而不是指向恰好连续有两个 GLuint 的对象的指针.这就是编译器提示它的原因。是的,它们在您的机器上可能具有相同的内存表示,但在另一台机器上可能并非如此。

如果你想将 glGenBuffers() 的结果存储到一个结构中,你可以这样做:

GLuint buffers[2];
glGenBuffers(2, buffers);
VBHandlers.cubevertex = buffers[0];
VBHandlers.trianglevertex = buffers[1];

假设 glGenBuffers 不会失败,这是最安全、可移植的方法。

关于c++ - 将指针传递给结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9049499/

相关文章:

c++ - 有没有一种通用的方法来传递需要较少工作的重载方法的指针(比我的示例)

c++ - 为什么在可变参数函数中要提升参数?

c++ - 可扩展的 STL 集,如 C++ 的容器

C++ 模板代码导致错误,在显然未正确分配的对象上调用 delete

c++ - 将 C++ 随机数分布传递给函数

c++ - 程序适用于 PC 上的 GCC 7.5,但不适用于在线编译器

c++ - 不同的派生类共享相同的方法

c++ - 如何以编程方式获取服务的状态(正在运行/已停止)

c++ - 使用WIC(Windows镜像组件)时遇到的问题

c++ - 如何将未知类型的数据成员初始化为默认值