我正在尝试初始化类FileList
,它将std::map
扩展为具有地图特定初始值设定项列表的FileInfo
对象的集合,但我收到以下错误:
错误C2440'初始化':无法转换为'初始化列表'到' FileList'
#include <string>
#include <map>
class FileInfo
{
public:
FileInfo(const std::string &name) : mName(name) { }
std::string operator () () const
{
return mName;
}
private:
std::string mName;
};
class FileList : public std::map<std::string, FileInfo> { };
int main(int argc, char *argv[])
{
FileInfo f1 = { "f1" };
FileInfo f2 = { "f2" };
FileList fileList{ { f1(), f1 }, { f2(), f2 } };
return 0;
}
我没有发现为什么会失败,因为FileList
它恰好是std::map
。
是否有可能将初始值设定项列表传递给std::map
继承的FileList
,而无需手动插入每个对象,如下所示?
FileList fileList;
fileList[f1()] = f1;
fileList[f2()] = f2;
编辑:
正如@DeiDei所说,不建议从std :: container派生。
答案 0 :(得分:2)
派生类中的构造函数不会从基类继承,默认情况下需要手动执行。
class FileList : public std::map<std::string, FileInfo>
{
using std::map<std::string, FileInfo>::map;
};
请注意,从stl包含中继承它不是一个好主意。
最好这样做:
using FileList = std::map<std::string, FileInfo>;