Hi all. I'm trying to overload the + operator in a forest class, a forest being a collection of trees, and the + operator is supposed to combine two forests into one. I have the following code as my class definition:
Code: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 &); };
The following is my implementation of operator+:
I get the following error on compile:Code: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|error: expected constructor, destructor, or type conversion before '&' token|
line 28 refers to the signature of my operator+ implementation.
I think to correct it i am supposed to add <NODETYPE> to the return type, giving:
But that gives me the following errors:Code: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|error: declaration of 'operator+' as non-function|
|28|error: missing template arguments before '&' token|
|28|error: 'f1' was not declared in this scope|
|28|error: missing template arguments before '&' token|
|28|error: 'f2' was not declared in this scope|
Can anyone help me with this? I'd be very very thankful.



LinkBack URL
About LinkBacks


