了解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}代码>将修复您的错误。我太累了,希望有人会写一个答案来解释原因和其他解决方案。发布真正的代码,并用分号完成,这会导致问题。