无法将 std::cout 传递给 ostream&constructor
Cannot pass std::cout to ostream& constructor
我试图创建通用流类持有者,但似乎无法将std::cout
传递给它,代码:
#include <iostream>
struct x
{
std::ostream &o;
x(std::ostream &o):o(o){}
};
int main()
{
x(std::cout);
x.o<<"Hin";
return 0;
}
编译为时失败
c++ str.cc -o str -std=c++11
str.cc: In function ‘int main()’:
str.cc:11:14: error: invalid use of qualified-name ‘std::cout’
str.cc:12:4: error: expected unqualified-id before ‘.’ token
为什么?
x(std::cout);
相当于
x std::cout;
它试图声明一个称为CCD_ 2的局部变量。这是不允许的。
如果您想声明x
类型的变量,并将std::cout
传递给其构造函数,那么这就是
x x(std::cout);
不过,为了您的理智起见,最好为类赋予一个不同的名称(并更改下面的行以使用该名称)。
使用:
int main()
{
x object(std::cout);
object.o << "Hin";
return 0;
}
相关文章:
- ostream过载时的缓冲区冲洗
- 需要从 istream 和 ostream 派生 iostream
- "ostream &os"有什么用?
- C++如何通过"constructor initialization"初始化行变量?
- 为什么常量词在重载运算符中不与 ostream 对象一起使用<<?
- 我的运算符重载是否有效<<(流插入)左操作数不是 ostream
- C++表达SFINAE和ostream操纵器
- 在抛出 'std::runtime_error' 的实例后终止调用 what(): Filebuf 和 ostream 的 I/O 错误
- oStream 不打印添加两个 valarray 的结果(使用运算符重载)
- 逗号在重载 ostream 和 istream 在结构中分开
- 为什么 Clang std::ostream 写一个 std::istream 无法读取的双精度?
- ostream 运算符<< 为获取 STL 容器而过载,传递 std::string 会破坏它?
- 将 ostream 包装在类中并模板化<<运算符
- 如何在C++中编写 ostream 的向量,它接收所有不同的输出流,如 cout、ostringstream 和 ofs
- 为什么在返回 ostream 类时使用引用?
- 将标准输出重定向到ostream
- boost::interprocess::file_lock 与 std::ostream 一起使用时的错误行为
- std::span constructor, libcxx vs libstdc++, template vs non-
- 重载 ostream << 运算符,指针作为参数,导致输出上的内存地址
- 无法将 std::cout 传递给 ostream&constructor