プロジェクトに取り組みませんでした。<<
演算子をクラスに追加したいと思います。問題:クラスは他のクラスのプライベート内部クラスであり、後者はnamespace
にあります。C++内部クラスの<<演算子を定義する
私はそれを作ることができません。
問題は、この方法を簡素化することができます。
#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を使用できません(残念ながら)。
あなたのコードはVisual C++コンパイラのバージョン15.0(つまりVS2008、pre C++ 11)で動作します。どのコンパイラを使用していますか?私はideone.comで動作しません.... –
私はそこに内部クラスは表示されません。名前空間のちょうど普通のクラス。 – RedX
@TonyD:いい質問ですが、それに応じてテキストを更新しました。私はプレーンg ++を使用しました:gccバージョン4.8.1(Ubuntu/Linaro 4.8.1-10ubuntu9)。 – unamourdeswann