私は Visual Studio 2008 で C++ プログラミングの課題に取り組んでいます。次の名前空間階層を定義するファイルが提供されました (名前はこの投稿のためのものです。「名前空間 XYZ-NAMESPACE」は冗長であることはわかっています)。
(MAIN-NAMESPACE){
a bunch of functions/classes I need to implement...
(EXCEPTIONS-NAMESPACE){
a bunch of exceptions
}
(POINTER-COLLECTIONS-NAMESPACE){
Set and LinkedList classes, plus iterators
}
}
MAIN-NAMESPACE の内容は多数のファイルに分割されており、何らかの理由で、Set と LinkedList の両方の operator<< が完全に MAIN-NAMESPACE の外側にある (ただし、Set と LinkedList のヘッダー ファイル内にある) ことがわかりません。セットバージョンは次のとおりです。
template<typename T>
std::ostream& operator<<(std::ostream& os,
const MAIN-NAMESPACE::POINTER-COLLECTIONS-NAMESPACE::Set<T>& set)
ここに問題があります。次のデータ構造があります。
Set A
Set B
Set C
double num
MAIN-NAMESPACE 内のクラスにあるように定義されています。クラスのインスタンスを作成し、セットの 1 つを出力しようとすると、「エラー C2679: バイナリ '<<' : タイプ 'const MAIN-NAMESPACE: :POINTER-COLLECTIONS-NAMESPACE::Set' (または受け入れ可能な変換がない)
ただし、main() 関数を作成し、セット A を作成し、それを埋めて、演算子を使用すると、機能します。
何が問題なのですか?(注:思いつく限り、using と include の任意の組み合わせを試しました)。