【发布时间】:2023-03-10 11:37:02
【问题描述】:
我遇到了一段代码,它基本上执行以下操作:
#include <iostream>
using namespace std;
int main()
{
cout << cerr << " Hi.";
return 0;
}
输出:
0x601088 Hi.
首先,为什么有人会做'cout
值得一提的是,上面的代码在我的机器上编译和执行没有错误。
但是,在运行相同版本的 gcc 5.4.0 的不同机器(服务器 ssh 连接)上的更复杂的代码(执行与上述相同的操作)在执行 make 时会产生此错误(为清楚起见而缩短):
error: no match for ‘operator<<’ (operand types are ‘std::ostream {aka std::basic_ostream<char>}’ and ‘std::ostream {aka std::basic_ostream<char>}’)
cout << cerr << "DB: Field " + e.table + "[" + e.index + "]." + e.field
对此有什么想法吗?
【问题讨论】:
-
Cerr 位于输出流上以获取警告。如果您重载左移运算符,则可以完成
-
这是一个错字,很可能。有两件事发送到
cout。打印出来时,第一件事不是很有意义。 -
你不应该在 c++ 中使用
g++而不是gcc吗? -
cout << cerr << " Hi.";错了,没有意义。要么是cerr << " Hi.";,要么是cout << " Hi.";。从您在代码中提到的错误消息来看,作者可能打算写cerr << "DB: Field " + e.table + "[" + e.index + "]." + e.field... -
@miro_x GCC 5.4.0 默认使用标志
-std=c++03编译,这意味着它使用ISO C++03
标签: c++ compiler-errors iostream