【发布时间】:2021-07-05 07:20:51
【问题描述】:
下面的代码在a::b::print 函数中给出错误:Invalid operands to binary expression ('std::ostream' (aka 'basic_ostream<char>') and 'Foo')。
如果我注释掉命名空间b 中的operator<< 重载,错误就会消失。但我不明白为什么这会有所不同,因为它与 namspace a 中的 operator<< 重载具有不同的签名。怎么回事?!
#include <iostream>
class Foo {};
namespace a {
std::ostream &operator<<(std::ostream &os, Foo &foo);
void print(Foo& foo) {
std::cout << foo;
}
namespace b {
std::ostream &operator<<(std::ostream &os, double d); // uncomment to resolve error
void print(Foo& foo) {
std::cout << foo; // error here
}
}
}
【问题讨论】:
标签: c++ c++11 namespaces operator-overloading overload-resolution