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

Understading ostream and how to declare in a class definition

本文关键字:定义 声明 ostream 了解      更新时间:2023-10-16

大家好,最近我开始更好地理解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);

问题是为什么我不能在类声明中调用这些"函数"以及方法之王是什么。例如,为了更清楚地说明如何以相同的方式声明相同的 methoud 以相同的方式在此使用 ostream o(方法(;

谢谢大家,对不起我的英语。

你的问题是编译器将语句ostream out (&buff) ;视为声明函数成员而不是数据成员的尝试; 这是最令人烦恼的解析的普遍情况。

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

更具体地说,c++11 只允许您使用带有 {}直接初始化或与 = 一起使用复制初始化,而不是()在类中数据成员初始化的任何"直接初始化"用法中。

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

class Test
{
  std::stringbuf buff ;
  std::ostream out ;
  public :
    Test () : out( & buff ) { }
} ;