在一个我没有启动的项目上工作,我��给一个类添加一个
问题可以简化如下:
我尝试使用
最后一个要求,我不能使用C++11(很遗憾)。
<<
运算符。问题是:该类是另一个类的私有内部类,而后者位于一个命名空间中。我无法实现这个目标。问题可以简化如下:
#include <iostream>
#include <map>
namespace A {
class B {
private:
typedef std::map<int, int> C;
C a;
friend std::ostream& operator<<(std::ostream& os, const C &c) {
for (C::const_iterator p = c.begin(); p != c.end(); ++p)
os << (p->first) << "->" << (p->second) << " ";
return os;
}
public:
B() {
a[13] = 10;
std::cout << a << std::endl;
}
};
}
int main() {
A::B c;
}
我尝试使用
g++ test.cpp
编译它:error: no match for ‘operator<<’
。编译器没有找到我的重载函数。我认为在头文件中定义会更简单,但是没有成功。如果您认为在CPP文件中定义更合适,我也可以这样做,但我不知道如何操作。最后一个要求,我不能使用C++11(很遗憾)。
operator<<
。然而,这意味着你还需要在类外部定义构造函数。 - BoBTFishclass C
替换typedef ... C
,那么我会在类C
内定义<<
运算符,对吗? - unamourdeswannstd::map
的类型别名。因此,ADL仅考虑namespace std
,并且在namespace A
中找不到您的运算符。 - Mike Seymour