我有很多operator<<()函数都是从做类似的事情开始的,所以我想把它抽象出来。这是我正在尝试做的事情的最小可重复案例(消除了所有的复杂性)。请注意,它不会编译。如果它确实编译了,我希望程序自己在一行上打印数字 3。
/*
clang++ -std=c++14 -Wall -Wextra foo.cc -o foo
*/
#include <ostream>
#include <iostream>
using std::cout;
using std::endl;
using std::ostream;
ostream& BaseFunction(ostream& os, const int x) {
return os << x;
}
int main(int argc, char *argv[]) {
cout << BaseFunction(cout, 3) << endl;
}
Run Code Online (Sandbox Code Playgroud)
错误开始是这样的:
foo.cc:17:8: error: invalid operands to binary expression ('ostream' (aka 'basic_ostream<char>') and
'ostream')
cout << BaseFunction(cout, 3) << endl;
~~~~ ^ ~~~~~~~~~~~~~~~~~~~~~
Run Code Online (Sandbox Code Playgroud)
然后提供了很多“没有已知的从 ostream 到 T 的转换”的建议。
有人看到我做错了什么吗?
Basefunction(cout, 3)返回cout。
因此,最后一行相当于
cout << 3;
cout << cout << endl;
Run Code Online (Sandbox Code Playgroud)
因为cout << cout没有意义,你会得到一个错误。