如何修复"没有依赖于模板参数的参数'glGenVertexArrays'......"C++ 中的错误
How to fix 'there are no arguments to 'glGenVertexArrays' that depend on a template parameter ...' error in c++
我有一个模板类,其中包含多个无符号的 int 和T*
和 5 函数,并且只声明了其中一个,该类是在 .h 文件中创建的,最后它包含一个 .tcc 文件,其中将声明剩余的 4 个函数,在GenerateBuffer
函数中,我使用多个 OpenGL 调用,所有这些调用都给出相同的错误there are no arguments to ‘glGenVertexArrays’ that depend on a template parameter, so a declaration of ‘glGenVertexArrays’ must be available
我曾经将函数声明放在一个.cpp文件中,而不是包含在 .h 文件的末尾,.cpp文件在开头包含 .h 文件,它没有给出任何错误,但是当尝试调用函数时,它会给出一个未声明的链接错误,目前我有这个
#define GL_GLEXT_PROTOTYPES
#include <GLFW/glfw3.h>
在头文件中,我试图也将其放入.tcc文件的beining中,但是我遇到了相同的错误,尝试了两个相同的错误。我在网上找到的针对此错误的唯一解决方案是包括有问题的文件,但我一直有,或者添加using namespace
但 glGenVertexArrays 不是任何命名空间的一部分,也不是我的类
头文件
#ifndef _VERTEXBUFFER_
#define _VERTEXBUFFER_
#include "../Core/Settings.h"
template<typename T> class VertexBuffer {
public:
unsigned int BufferId;
unsigned int IndexId;
unsigned int VAO;
T* Vertices;
unsigned int* Indexs;
int DrawCount() { return (Indexs != nullptr) ? sizeof(Indexs) / sizeof(Indexs[0]) : sizeof(Vertices) / sizeof(Vertices[0]);}
void GenerateBuffer(T data[]);
void SetIndexData(unsigned int data[]);
void Bind();
void UnBind();
};
#include "VertexBuffer.tcc"
#endif
有问题的函数
template<typename T> void VertexBuffer<T>::GenerateBuffer(T data[]) {
Vertices = data;
if (Settings::Engine == OpenGL) {
glGenVertexArrays(1, &VAO);
glBindVertexArray(VAO);
glGenBuffers(1, &BufferId);
glBindBuffer(GL_ARRAY_BUFFER, BufferId);
glBufferData(GL_ARRAY_BUFFER, sizeof(data), Vertices, GL_STATIC_DRAW);
glEnableVertexAttribArray(0);
glVertexAttribPointer(0, 2, GL_FLOAT, false, sizeof(data[0]), 0);
}
}
与您的实际问题略微无关,但恕我直言,太重要了,不能只放在评论中: 您正在以幼稚的方式使用sizeof
运算符:
template<typename T> void VertexBuffer<T>::GenerateBuffer(T data[]) { glBufferData(…, sizeof(data), …, …);
它不是那样工作的。您会看到,sizeof
返回您传入的表达式的结果的大小。写sizeof(1+2)
同样有效.那么data
的大小是多少?当然,表达结果的大小data
。鉴于数据是一个数组函数参数(而不是实际的数组对象(,表达式data
衰减为指针,因此sizeof(data)
告诉您指针的大小,而不是数组的大小!
我只是在这里指出这一点,因为一旦你解决了那个原始问题,你无疑会陷入这个问题。
- 如何反转整数参数包
- 我收到同义重复编译器错误。我应该如何修复"类型"X"的参数与类型"X"的参数不兼容?
- 如何修复带有 clang 的参数'args'缺少默认参数的问题?
- 标准对此指向成员函数类型模板参数有何说明?是我的代码有误,还是 MSVS 16.6 有问题?
- 如何修复用于根据参数返回不同类型的模板类中的错误C2679?
- 如何修复"ctypes"。参数错误:参数 2:<键入"异常.类型错误">:RaspberryPi 中的错误类型"错误
- 如何修复"没有依赖于模板参数的参数'glGenVertexArrays'......"C++ 中的错误
- 如何修复"没有重载函数需要 2 个参数"错误C++
- 如何修复MSVC++(Microsoft Visual studio)中"macro overloading"的可变参数宏相关问题?
- 当将 getline 与 int 一起使用时,如何修复"没有重载函数 'getline' 的实例与参数列表匹配"
- 如何修复传递参数时调用错误函数的主函数?(C++)
- 如何修复错误"在c ++ UE4中为类似函数的宏调用'TEXT的参数过多
- std::find是否隐式修复无效参数
- 野牛:如何修复这个"参数太多而无法运行'int yylex()'错误?
- 在修复模板参数的同时扩展模板类
- 错误:没有构造函数修复的实例::修复与参数列表 (C++) 匹配
- "return-by-reference"或"pass-by-reference"参数何时与constexpr兼容?
- 如何修复"'一元'类型参数无效?
- 如何修复"'一元*'的无效类型参数?
- 修复错误:将'const foo'作为'const size_t foo::method()'的参数传递'this'