无法初始化一个向量来保存另一个用其构造函数初始化的类

时间:2015-02-13 11:31:13

标签: c++

我有以下代码。

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){}但它不会让我这样做。

3 个答案:

答案 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,这段代码可以毫不费力地编译。