将指针传递到结构
Pass pointer to structure
我习惯于在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);
强制转换参数。但是,这可能会崩溃,因为类型可能在内存中是不同的表示形式。
相关文章:
- 如何在 C# 中映射双 C 结构指针?
- C++:映射结构中的结构指针
- C++:添加新结构时,结构指针向量中的所有元素都会更新
- 类的静态结构指针声明在C++
- 在两个.cpp文件之间定义全局类/结构指针
- 返回对常量结构(指针类型)成员的引用:明显的左值到右值转换
- 是否可以将无符号字符数组reinterpret_cast到仅包含C++中无符号字符成员的结构指针
- 如何在地图中使用结构指针
- 结构指针在"新"调用上给出已分配的地址?
- 铸造结构指针指向C 的工会指针
- c++ 结构指针在初始化为 NULL 时无法读取内存
- 函数中的结构指针的地址为0x1
- C 用结构指针初始化结构
- C 结构指针铸成数组Interop C#
- 方法中不允许访问结构指针
- 如何打印出结构指针
- MPI_Op_create:候选功能不可行.自定义结构指针不能解释为空指针
- 尝试将结构指针传递给类时出错
- 初始化结构指针的值
- 使用 pybind11 将自定义结构(指针向量)从 C++ 传递到 python 的方法是什么?