我试图在森林类中重载 + 运算符,森林是树木的集合,而 + 运算符应该将两个森林合并为一个。我有以下代码作为我的类定义:
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' 没有在这个范围内声明|
谁能帮我这个?我会非常非常感谢。