C++ 可变构造问题

C++ 可变构造问题,c++,templates,c++14,variadic-templates,C++,Templates,C++14,Variadic Templates,我一直在做一个项目,但我犯了一个奇怪的错误。我不能将2个着色器实例传递给可变构造函数,即使它说它支持2个着色器参数 确切错误消息: E0289构造函数“Program::Program”的实例与参数列表不匹配 参数类型为:(着色器,着色器) 以下是代码: #pragma一次 #包括“Renderer.h” #包括“Shader.h” 班级计划 { 公众: 模板 程序() { GLCall(m_renderId=glCreateProgram()); 指定着色器(着色器…); GLCall(glL

我一直在做一个项目,但我犯了一个奇怪的错误。我不能将2个着色器实例传递给可变构造函数,即使它说它支持2个着色器参数

确切错误消息: E0289构造函数“Program::Program”的实例与参数列表不匹配 参数类型为:(着色器,着色器)

以下是代码:

#pragma一次
#包括“Renderer.h”
#包括“Shader.h”
班级计划
{
公众:
模板
程序()
{
GLCall(m_renderId=glCreateProgram());
指定着色器(着色器…);
GLCall(glLinkProgram(m_renderId));
GLCall(glValidateProgram(m_renderId));
GLCall(glUseProgram(m_RendererID));
}
程序(const std::string和vertexShaderFilepath,const std::string和fragmentShaderFilepath)
{
着色器vertexShader(vertexShaderFilepath,GL_VERTEX_着色器);
着色器fragmentShader(fragmentShaderFilepath,GL_FRAGMENT_着色器);
程序(vertexShader,fragmentShader);//此处有错误
}
私人:
无符号整数m_renderId;
模板
无效指定着色器(第一个和第一个、常量着色器和其他)
{
着色器&着色器=(着色器&)第一;
GLCall(glAttachShader(m_renderId,shader.getrenderId());
赋值着色器(其他…);
}
void赋值着色器(){};
};
以下是调用程序构造函数的行:

程序程序(“resources/shaders/basic_vert.glsl”、“resources/shaders/basic_frag.glsl”);

您的构造函数缺少参数列表。它得到一个可变模板参数,但参数列表显式为空

除此之外,正如@richardcritten所提到的,您没有按照预期委托构造函数,而是创建了
程序的临时实例。委托(使用初始值设定项列表),或直接调用
AssignShaders


另外,别忘了在这个类的析构函数中调用
glDeleteProgram
,否则会泄漏OpenGL资源

正如stackoverflow.com中所解释的,因为所显示的代码不满足a的所有要求,所以在您这样做之前,不太可能有人能够帮助您。有关更多信息,请参阅。该代码有很多错误。你有使用非变量模板的经验吗?当你对C++模板背后的核心概念有了更深入的了解时,你可能更容易理解。代码>没有接受两个
着色器
参数的构造函数。有一个模板化的构造函数,但不接受任何参数。还有调用
程序(vertexShader、fragmentShader)
不是委托构造函数,只会创建一个新的临时
程序
,然后销毁它。有关详细信息,请参见此处的委托构造函数