我有一个结构:
struct ShaderMacroStruct{
std::string macro;
std::string value;
ShaderMacroStruct():macro(""),value("")
{}
};
我有一个方法,其中一个参数是结构的向量(在上面定义):
GLuint MakeSeparableProgram(GLenum shaderType, std::string &shaderText ,std::vector< ShaderMacroStruct> &shadersMacroList);
但是当传递所有参数时,我收到以下编译错误:
no instance of overloaded function "my_namespace::MakeSeparableProgram" matches the argument list
argument types are: (int, const std::string,
std::vector<my_namespace::ShaderMacroStruct,
std::allocator<my_namespace::ShaderMacroStruct>>)
为什么在这种情况下它要求我提供分配器?
我正在使用MSVC10编译器。
更新
如果我改变字符串&amp;然后问题就解决了。但在这种情况下,我强制在函数体中复制字符串,以便能够修改它的内容。方法不经常调用,但仍然如何解决这个问题以表现明智的方式?
这是函数调用:
GLuint prog = MakeSeparableProgram(GL_VERTEX_SHADER,LoadShader("sfd/demoShader.frag"),shadersMacroList);
LoadShader()返回const std :: string。
答案 0 :(得分:1)
它不是要求你提供分配器;这只是std::vector
中的第二个模板参数,它具有默认值,因此您通常不需要提供它。请注意,之前没有结束>
;它仍然是vector
类型的一部分。
问题似乎是函数需要第二个参数的可变string
(非const引用),但是你试图传递const
或临时字符串 - 尽管你忘了告诉我们这个函数是如何被调用的,我不能完全确定它。
您可能希望第二个和第三个参数为const
个引用;除非该函数旨在修改参数,在这种情况下,您必须传递要修改的命名的可变变量。