将指针传递到结构

Pass pointer to structure

本文关键字:结构 指针      更新时间:2023-10-16

我习惯于在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 SettingsOwnerMy DocumentsDownloadsOpenGL-tutorial_v0003playgroundplayground.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

我不习惯"Typecast"几乎不知道什么,但当涉及指针时,我的强硬(&)运算符将获取创建的本地变量的addr。希望我能得到一些帮助,谢谢。

glGenBuffers()需要一个GLuint的数组,而不是指向一行中恰好有两个GLuint的对象的指针。这就是编译器抱怨它的原因。是的,它们在你的机器上可能有相同的内存表示,但在另一台机器上可能不是这样。

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

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

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

编译器错误告诉您将错误的类型传递到函数中。它期望一个指向GLuint的指针,而你却试图给它一个指向VertexHandler的指针。如果类型在内存中的表示形式完全相同,则可以使用glGenBuffers(2, (GLuint*) &VBHandlers);强制转换参数。但是,这可能会崩溃,因为类型可能在内存中是不同的表示形式。