C++ Can';t初始化一个向量以容纳另一个用其构造函数初始化的类

C++ Can';t初始化一个向量以容纳另一个用其构造函数初始化的类,c++,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;

我有下面的代码

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.
};
类屏幕{
公众:
typedef std::string::size_type pos;
Screen()=default;//默认构造函数
屏幕(位置ht,位置wd,字符c):高度(ht),宽度(wd),内容(ht*wd,c){}
私人:
pos游标=0;
位置高度=0,宽度=0;
std::字符串内容;
可变大小访问控制;
};
班级窗口经理{
私人:
std::vector screens{Screen(24,80',)};//-->此行显示错误消息。
};
我在指示行中收到以下消息:

错误C2797:“
Window\u mgr::screens
”:未实现成员初始值设定项列表或非静态数据成员初始值设定项中的列表初始化


基本上,我想做的是,让类
Window\u mgr
有一个向量,其中包含一个
Screen
对象,该对象使用其构造函数初始化,即:
Screen(pos-ht,pos-wd,char-c):高度(ht),宽度(wd),内容(ht*wd,c){}
,但它不允许我这样做

该错误意味着您的MSVC++版本未实现非静态数据成员初始化。您需要在
窗口的构造函数\u mgr
中初始化它

由于它也不支持初始化列表(uff)中的列表初始化,因此需要在构造函数主体中初始化它:

Window_mgr::Window_mgr()
{
    screens = { Screen(24, 80, ' ') };
}

该错误意味着您的MSVC++版本未实现非静态数据成员初始化。您需要在
窗口的构造函数\u mgr
中初始化它

由于它也不支持初始化列表(uff)中的列表初始化,因此需要在构造函数主体中初始化它:

Window_mgr::Window_mgr()
{
    screens = { Screen(24, 80, ' ') };
}

正如错误消息所说,您的编译器不支持这种初始化方式,即使它完全是cromulent C++11。如果无法更新编译器,则必须在构造函数中以老式方式填充它


正如错误消息所说,您的编译器不支持这种初始化方式,即使它完全是cromulent C++11。如果无法更新编译器,则必须在构造函数中以老式方式填充它

std::矢量屏幕{Screen(24,80,');
这是C++11风格的初始化。当然,使用C++11,这段代码可以顺利编译。

std::vector screens{Screen(24,80,');

这是C++11风格的初始化。当然,使用C++11,这段代码可以顺利编译。

“应该可以工作,但还不能”为window\u mgr编写构造函数并在正文中初始化它?毫不奇怪,您的代码可以像clang 3.5一样编译。我认为您使用的是msvc。@WhozCraig“C2797”是一个绝对的赠品:)@T.C.并且消息“未实现”是尽可能清楚的。“应该可以工作,但还没有”为window_mgr编写构造函数并在正文中初始化它?毫不奇怪,您的代码按照clang 3.5的方式编译。我认为您使用的是msvc。@WhozCraig“C2797”是一个绝对的赠品:)@T.C.并且消息“未实现”是尽可能清楚的。但它还说,成员初始值设定项列表中也不支持列表初始化,所以这不起作用。您需要在初始化列表之外对其进行初始化。我已经更新了我的答案。上面的工作,我的程序编译良好。非常感谢。只是想澄清一下,这是编译器的问题,而不是语法错误吗?是的,唯一的问题是你的MSVC++版本没有完全实现ISO C++11。您需要MSVC++2013以获得完全支持。但它还指出,成员初始值设定项列表中也不支持列表初始化,因此这不起作用。您需要在初始化列表之外对其进行初始化。我已经更新了我的答案。上面的工作,我的程序编译良好。非常感谢。只是想澄清一下,这是编译器的问题,而不是语法错误吗?是的,唯一的问题是你的MSVC++版本没有完全实现ISO C++11。您需要MSVC++2013才能获得全面支持。cromulent?(我在字典里找不到这个词。)克罗姆伦?(我在字典里找不到这个词。)
std::vector<Screen> screens{ Screen(24, 80, ' ') };