我有以下代码。
class Screen{
public:
typedef std::string::size_type pos;
Screen() = default; //Default Constructor
Screen(pos ht, pos wd, char c) : height(ht), width(wd), contents(ht * wd, c){}
private:
pos cursor = 0;
pos height = 0, width = 0;
std::string contents;
mutable size_t access_ctr;
};
class Window_mgr{
private:
std::vector<Screen> screens{ Screen(24, 80, ' ') };//--> error message at this line.
};
我在指定的行显示以下消息:
错误C2797:&{39;
Window_mgr::screens
&#39;:成员初始化列表中的列表初始化或非静态数据成员初始值设定项未实现
基本上我要做的是让类Window_mgr
有一个包含单个Screen
对象的向量,该对象使用其构造函数初始化,即:Screen(pos ht, pos wd, char c) : height(ht), width(wd), contents(ht * wd, c){}
但它不会让我这样做。
答案 0 :(得分:3)
该错误意味着您的MSVC ++版本未实现非静态数据成员初始化。您需要在Window_mgr
的构造函数中初始化它。
由于它不支持初始化列表(uff)中的列表初始化,你需要在构造函数体中初始化它:
Window_mgr::Window_mgr()
{
screens = { Screen(24, 80, ' ') };
}
答案 1 :(得分:1)
正如错误消息所说,你的编译器不支持这种初始化风格,即使它是完全cromulent C ++ 11。如果你无法更新编译器,那么你必须在构造函数中以老式的方式填充它
Window_mgr() /* can't list-initialise it here either */ {
screens.emplace_back(24, 80, ' '); // if emplace_back is supported
screens.push_back(Screen(24, 80, ' ')); // otherwise
}
答案 2 :(得分:0)
std::vector<Screen> screens{ Screen(24, 80, ' ') };
这是C ++ 11样式初始化。当然,使用C ++ 11,这段代码可以毫不费力地编译。