Understading ostream以及如何在类定义中声明

时间:2017-03-17 19:56:48

标签: c++ class methods ostream

大家好,我最近开始理解更好的c ++,我发现了不同的问题,而且大多数问题都开始变得清晰了。我不理解的一件事是当我尝试声明一个ostream或类声明中的每个流时编译器发现的错误。例如

class Test{
  stringbuff buff;
  ostream out (&buff)

    }

编译器返回以下错误消息:

expected identifier before ‘&’ token

另一个是我尝试的时候:

stringstream stream(std::in|std::out);

编译器返回

error: ‘std::ios<char, std::char_traits<char> >::in’ is not a type
   stringstream out(ios::in|ios::out);

问题是为什么我不能在类声明中调用这些'函数'以及方法之王。例如,要更清楚的是如何以与ostream o(方法)相同的方式声明同一个方法;

感谢所有人,对不起我的英语。

1 个答案:

答案 0 :(得分:0)

您的问题是编译器将语句ostream out{ &buff };视为尝试声明函数成员,而不是数据成员;这是Most vexing parse的一般情况。

&#34;使用C ++ 11中引入的新的统一初始化语法解决了这个问题&#34;对于类内初始化也是:{}

更具体地说,c ++ 11只允许您使用=复制初始化()一起使用直接初始化 ,而不是class Test { std::stringbuf buff ; std::ostream out ; public : Test () : out( & buff ) { } } ; 的任何&#34; direct-init&#34;数据成员在类初始化中的用法。

另一种选择是在构造函数的初始化列表中初始化数据成员。

Party