フォレスト クラスで + 演算子をオーバーロードしようとしています。フォレストは木のコレクションであり、+ 演算子は 2 つのフォレストを 1 つに結合することになっています。クラス定義として次のコードがあります。
template<typename NODETYPE>
class Forest
{
public:
friend Forest& operator+<>(Forest&, Forest&);
friend ostream& operator<<<>(ostream&, const Forest&);
friend istream& operator>><>(istream&, Forest&);
Forest();
Forest( const Forest& otherForest);
~Forest();
void nodes(int&) const;
private:
ForestNode<NODETYPE> *root;
ForestNode<NODETYPE> *getNewNode( const NODETYPE &);
};
以下は私の operator+ の実装です:
template<typename NODETYPE>
Forest& operator+<>(Forest& f1, Forest& f2)
{
f3 = new Forest();
f3.root = *f1.*root;
f3.root.sibling = *f2.*root;
*f1.root = 0;
*f2.root = 0;
return f3;
}
コンパイル時に次のエラーが発生します。
|28|エラー: '&' トークンの前にコンストラクタ、デストラクタ、または型変換が必要です|
行 28 は、私の operator+ 実装の署名を参照しています。
私はそれを修正するために、戻り値の型に追加することになっていると思います:
template<typename NODETYPE>
Forest<NODETYPE>& operator+<>(Forest& f1, Forest& f2)
{
f3 = new Forest();
f3.root = *f1.*root;
f3.root.sibling = *f2.*root;
*f1.root = 0;
*f2.root = 0;
return f3;
}
しかし、それは私に次のエラーを与えます:
|28|エラー: 'operator+' を非関数として宣言| |28|エラー: '&' トークンの前にテンプレート引数がありません| |28|エラー: 'f1' はこのスコープで宣言されていません| |28|エラー: '&' トークンの前にテンプレート引数がありません| |28|エラー: 'f2' はこのスコープで宣言されていません|
誰でもこれで私を助けることができますか?とても感謝しています。