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

dan*_*jar 0 c++ compiler-construction struct typedef map

我有以下结构.

struct ShaderObject
{
    const GLchar* File;
    ShaderType Type;
    GLuint Shader;
    ShaderObject(const GLchar* File, ShaderType Type);
};
Run Code Online (Sandbox Code Playgroud)

而这种类型的地图.

typedef map<string, ShaderObject> Shaders;
Run Code Online (Sandbox Code Playgroud)

编译器给我一个错误,链接到执行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
Run Code Online (Sandbox Code Playgroud)

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

ani*_*nio 6

ShaderObject如果要将其置于内部,则需要提供默认构造函数(可以不带参数调用的构造函数)std::map.原因是,如果您使用operator[]on map来存在不存在的密钥,它将自动插入该密钥并将 ShaderObject值作为值.它将使用默认构造函数来创建此对象.