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

Understading ostream and how to declare in a class definition

大家好,最近我开始更好地理解 C++,我发现了不同的问题,其中大部分问题都开始变得清晰了。我不明白的一件事是编译器在我尝试在 class 声明中声明一个 ostream 或每个流时发现的错误。例如

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

; }

编译器returns出现这个错误信息:

expected identifier before ‘&’ token

另一个是当我尝试:

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

编译器returns

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

问题是为什么我不能在 class 声明中调用这些 'functions' 以及什么是方法之王。例如,为了更清楚如何以与 ostream o (method);

相同的方式声明要在其中使用的相同方法

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

您的问题是语句 ostream out (&buff) ; 被编译器视为试图声明函数成员,而不是数据成员;这是 Most vexing parse.

的一般情况

"Using the new uniform initialization syntax introduced in C++11 solves this issue" 也用于 in-class 初始化:ostream out{ &buff };.

更具体地说,c++11 只允许您将 直接初始化{}复制初始化[=27] 一起使用=] 与 =,而不是 () 在它的任何 "direct-init" 用法中用于数据成员 in-class 初始化。

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

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