0

我有一个结构:

    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 编译器。

更新:

如果我将 string& 更改为 const 那么问题就解决了。但在这种情况下,我不得不在函数体中复制字符串以便能够修改它的内容。该方法不经常调用,但仍然如何以性能明智的方式解决这个问题?

这是函数调用:

GLuint prog = MakeSeparableProgram(GL_VERTEX_SHADER,LoadShader("sfd/demoShader.frag"),shadersMacroList);

其中 LoadShader() 返回 const std::string。

4

1 回答 1

1

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

问题似乎是该函数需要一个可变string的第二个参数(非常量引用),但您试图传递一个const或临时字符串 - 尽管由于您忘记向我们展示如何调用该函数,我可以不能完全确定。

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

于 2013-06-04T10:32:46.947 回答