将指针传递给结构

时间:2012-01-28 23:22:22

标签: c++

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

glGenBuffers(Size, PointerToBuff);

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

glGenBuffers(2, *PointerToBuff);

所以我创建了一个结构:

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

并使用proc作为:

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

我不习惯“Typecast”几乎不知道某些东西,但是当关于指针时,我应该(&)运算符将采用创建的局部变量的addr。希望我得到一些帮助,谢谢。

2 个答案:

答案 0 :(得分:1)

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

如果要将glGenBuffers()的结果存储到结构中,可以执行以下操作:

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

这是最安全,最便携的方式,假设glGenBuffers没有失败。

答案 1 :(得分:0)

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