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