我正在使用一个库来定义全局命名空间中的输出流操作符(operator <<).在我自己的命名空间中,我总是在全局命名空间中声明这样的运算符,并且从未遇到过这些运算符的问题.但是现在由于各种原因我需要在我自己的命名空间中声明这些运算符,突然之间,编译器似乎无法找到库中声明的运算符.
这是一个简单的例子,说明了我的问题:
#include <iostream>
namespace A
{
struct MyClass {};
}
std::ostream & operator<<( std::ostream & os, const A::MyClass & )
{ os << "namespace A"; return os; }
namespace B
{
struct MyClass {};
std::ostream & operator<<( std::ostream & os, const B::MyClass & )
{ os << "namespace B"; return os; }
}
namespace B
{
void Test()
{
std::cout << A::MyClass() << std::endl;
std::cout << B::MyClass() << std::endl;
}
}
int main()
{
B::Test();
return 1;
} …Run Code Online (Sandbox Code Playgroud)