我有以下结构。
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
我不明白错误。我该如何解决?因为我以前从来没有这样的错误,我无法解释,我不确定你需要哪些信息。请随时询问详情! 非常感谢!
答案 0 :(得分:6)
如果要将ShaderObject
放在std::map
中,则需要为operator[]
提供默认构造函数(可以不带参数调用的构造函数)。这样做的原因是,如果您在map
上使用ShaderObject
来获取不存在的密钥,它会自动插入该密钥和新 {{1}}作为价值。它将使用默认构造函数来创建此对象。