Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/163.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
了解ostream以及如何在类定义中声明 最近我开始更清楚地理解C++,我发现了不同的问题,其中大部分已经开始变得清晰。我不明白的一件事是,当我试图在类声明中声明ostream或every流时,编译器发现了一个错误。比如说 class Test{ stringbuff buff; ostream out (&buff)_C++_Class_Methods_Ostream - Fatal编程技术网

了解ostream以及如何在类定义中声明 最近我开始更清楚地理解C++,我发现了不同的问题,其中大部分已经开始变得清晰。我不明白的一件事是,当我试图在类声明中声明ostream或every流时,编译器发现了一个错误。比如说 class Test{ stringbuff buff; ostream out (&buff)

了解ostream以及如何在类定义中声明 最近我开始更清楚地理解C++,我发现了不同的问题,其中大部分已经开始变得清晰。我不明白的一件事是,当我试图在类声明中声明ostream或every流时,编译器发现了一个错误。比如说 class Test{ stringbuff buff; ostream out (&buff),c++,class,methods,ostream,C++,Class,Methods,Ostream,); } 编译器返回此错误消息: 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); 错误:“std::ios::in

); }

编译器返回此错误消息:

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);
错误:“std::ios::in”不是类型
stringstream-out(ios::in | ios::out);
问题是为什么我不能在类声明中调用这些“函数”以及什么是方法之王。例如,为了更清楚地说明如何以与ostream o(method)相同的方式声明一个相同的方法来使用它


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

你的问题是那句话
ostream out(&buff)视为试图声明函数成员,而不是数据成员;这是一个普遍的情况


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

更具体地说,c++11只允许您使用
{}
直接初始化,或使用
=
复制初始化,而不允许在类初始化中对数据成员使用
()
的任何“直接初始化”用法

另一个选项是在构造函数的init列表中初始化数据成员

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

ostream out{&buff}将修复您的错误。我太累了,希望有人会写一个答案来解释原因和其他解决方案。发布真正的代码,并用分号完成,这会导致问题。