传递结构的向量作为函数参数请求分配器

时间:2013-06-04 10:22:59

标签: c++

我有一个结构:

    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。

1 个答案:

答案 0 :(得分:1)

它不是要求你提供分配器;这只是std::vector中的第二个模板参数,它具有默认值,因此您通常不需要提供它。请注意,之前没有结束>;它仍然是vector类型的一部分。

问题似乎是函数需要第二个参数的可变string(非const引用),但是你试图传递const或临时字符串 - 尽管你忘了告诉我们这个函数是如何被调用的,我不能完全确定它。

您可能希望第二个和第三个参数为const个引用;除非该函数旨在修改参数,在这种情况下,您必须传递要修改的命名的可变变量。