了解 ostream 以及如何在类定义中声明
Understading ostream and how to declare in a class definition
大家好,最近我开始更好地理解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);
问题是为什么我不能在类声明中调用这些"函数"以及方法之王是什么。例如,为了更清楚地说明如何以相同的方式声明相同的 methoud 以相同的方式在此使用 ostream o(方法(;
谢谢大家,对不起我的英语。
你的问题是编译器将语句ostream out (&buff) ;
视为声明函数成员而不是数据成员的尝试; 这是最令人烦恼的解析的普遍情况。
"使用C++11中引入的新统一初始化语法解决了这个问题"对于类内初始化也:ostream out{ &buff };
。
更具体地说,c++11 只允许您使用带有 {}
的直接初始化或与 =
一起使用复制初始化,而不是()
在类中数据成员初始化的任何"直接初始化"用法中。
另一种选择是在构造函数的初始化列表中初始化数据成员。
class Test
{
std::stringbuf buff ;
std::ostream out ;
public :
Test () : out( & buff ) { }
} ;
相关文章:
- 如何确保C++函数在定义之前声明(如override关键字)
- 为什么在定义函数之前先声明它
- 为什么我不能在一个类的不同行中声明和定义成员变量?
- Visual Studio中的函数声明和函数定义问题
- C++错误C2600:无法定义编译器生成的特殊成员函数(必须首先在类中声明)
- 如何在标头中声明(或定义)函数的问题
- 程序顶部的声明与定义(最佳实践)
- 类的前向声明之后的类成员函数定义,在类声明之前
- 静态变量声明和定义
- C++ G++ 编译器 - 错误:隐式声明的定义
- C++:错误重定义和先前声明
- 类模板静态数据成员定义/声明/初始化
- 只有一个定义/声明时标头声明变量的多堆定义错误
- OpenCV - Ptr 语法和类定义/声明 - 混淆?
- 如何为非类型模板类的专用化定义声明之外的方法
- 我如何防止静态类成员变量需要两个定义/声明
- 默认定义声明的详细程度不完整
- C++:非成员函数的定义/声明的位置
- 将比较操作符的重载定义/声明为库中的非成员函数
- C++头重新定义/声明混合