1
我試圖初始化類FileList
,延伸std::map
爲FileInfo
對象與地圖的特定初始化列表的集合,但我收到以下錯誤:傳遞初始化列表到繼承的地圖
Error C2440 'initializing': cannot convert from 'initializer list' to '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
。
是否有可能將初始化程序列表傳遞給由FileList
繼承的std::map
,而無需像以下那樣手動插入每個對象?
FileList fileList;
fileList[f1()] = f1;
fileList[f2()] = f2;
編輯:
由於@DeiDei說,不建議從一個std派生::容器。
構造函數默認情況下不繼承。查找繼承構造函數。另外,請不要從std ::容器派生。它不會工作得很好。 – DeiDei
如果你想讓這個類型成爲一個地圖,你可以使用FileList = std :: map;'。 –
@DeiDei我不知道它不推薦擴展STL容器,現在我發現了主要原因:「他沒有從std :: vector publicitly繼承的主要原因是沒有虛擬析構函數」[http:// stackoverflow.com/a/4357417/4806882](http://stackoverflow.com/a/4357417/4806882) –