大家好,我最近开始理解更好的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(方法)相同的方式声明同一个方法;
感谢所有人,对不起我的英语。
答案 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