gpt4 book ai didi

c++ - 不能在 .h 文件 C++ 中使用 glGenBuffers

转载 作者:行者123 更新时间:2023-12-04 16:55:22 28 4
gpt4 key购买 nike

我正在尝试用 C++ 学习 OpenGL。为了清理我的代码,我试图创建一个头文件,其中包含所有描述对象的变量。这个标题看起来像这样:

#pragma once

#include <iostream>
#include <glad/glad.h>
#include <GLFW/glfw.h>
#include <glm/glm.hpp>
#include <glm/gtc/matrix_transform.hpp>
#include <stb/stb_image.h>

namespace data {

...

float fragments[] = {...}
int indices[] = {...}

...

}
我还想在这个命名空间中添加 VAO 和 VBO,但是一旦我尝试使用 glGenBuffers 来实现它们和 glGenVertexArray :
unsigned int VBO;
glGenBuffers(1, &VBO);
IDE (Visual Studio) 指出了一个错误,上面写着“此声明不包含存储类或类型标识符”(引用 glGenBuffer 函数;我的编辑器设置为意大利语,因此我的翻译可能不完美) .我还尝试在这个命名中添加一个类(即使在我的开始计划中我想避免这种方法):
#include <...>

namespace data {


class Data {

public:
unsigned int VBO;
glGenBuffers(1, &VBO)

};


}
这次我得到的错误是:“缺少显式类型。它将使用 int”(引用 glGenBuffers 函数;保存我之前写的内容:翻译可能不完美,但我认为这是可以理解的)。
作为最后一次尝试,我尝试在 main.cpp 中实现命名空间。文件也在 main 下功能。我得到的错误与第一个相同,但如果我在 main 中使用这些函数调用,它们会起作用。我也已经写了一些其他的类,比如 shader.hcamera.h关注 this指导,并且我能够(使用必要的包括,例如 glad/glad.h )使用 gl* glCreateShader等功能, glCreateProgram , glAttachShader等等。

最佳答案

来自 OP 的片段:

namespace data {


class Data {

public:
unsigned int VBO;
glGenBuffers(1, &VBO)

};

}
这是一个语法错误。 glGenBuffers(1, &VBO)是函数体块范围之外的函数调用。你必须移动它,例如进入 class Data 的构造函数.充其量,您可以将其放入用作 Data::VBO 的初始值设定项的 lambda 中。 :
namespace data {


class Data {

public:
unsigned int VBO
= []() { unsigned int VBO; glGenBuffers(1, &VBO); return VBO; }();

};


}
看起来有点绕?如 glGenBuffers()需要一个指针,局部变量 VBO必须在 lambda 内使用。它的值为 return ed 来初始化成员 var。 VBO .当然,我可以给本地变量。还有一个名字……
Live Demo on coliru

关于c++ - 不能在 .h 文件 C++ 中使用 glGenBuffers,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69116441/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com