为什么我不能用这个结构作为值创建一个std :: map

时间:2012-08-25 17:51:53

标签: c++ compiler-construction map struct typedef

我有以下结构。

struct ShaderObject
{
    const GLchar* File;
    ShaderType Type;
    GLuint Shader;
    ShaderObject(const GLchar* File, ShaderType Type);
};

这种类型的地图。

typedef map<string, ShaderObject> Shaders;

编译器给我一个错误,链接到map的实现。

 Error 1 error C2512: 'ShaderObject::ShaderObject': No appropriate default constructor
 available c:\program files (x86)\microsoft visual studio 11.0\vc\include\map 198 1

我不明白错误。我该如何解决?因为我以前从来没有这样的错误,我无法解释,我不确定你需要哪些信息。请随时询问详情! 非常感谢!

1 个答案:

答案 0 :(得分:6)

如果要将ShaderObject放在std::map中,则需要为operator[]提供默认构造函数(可以不带参数调用的构造函数)。这样做的原因是,如果您在map上使用ShaderObject来获取不存在的密钥,它会自动插入该密钥和 {{1}}作为价值。它将使用默认构造函数来创建此对象。