我在理解如何实现这一点方面遇到了很大的麻烦。
这是到目前为止我尝试过的原型(prototype)和实现(请注意,其中两次尝试已被注释掉-标记为(1)和(2)
//--- ADD PROTOTYPE OF ASSIGNMENT OPERATOR HERE
// (1) void operator=(const BST<DataType> & origList);
// (2) BST<DataType>& BST<DataType>::operator=(const BST& origList)
BST::operator=(const BST& origList);
当前,每个结果都会出现以下错误:
home\visual studio 2010\projects\bst.h(139): error C4430: missing type specifier - int assumed.
这是赋值运算符的实现:
//--- Definition of operator=
template <typename DataType>
BST<DataType>& BST<DataType>::operator=(const BST& origList)
{
if (this != &origList)
{
copyTree(origList.myRoot, myRoot);
destroy(myRoot);
}
return *this;
}
这是copyTree递归函数:
//--- Definition of copy constructor()
template <typename DataType>
BST<DataType>::BST(const BST<DataType> & origList)
{
copyTree(origList.myRoot, myRoot);
}
//--- Definition of copyTree()
template <typename DataType>
void BST<DataType>::copyTree(BinNodePointer origRoot, BinNodePointer & subtreeRoot)
{
if (origRoot == 0)
subtreeRoot = NULL;
else
{
subtreeRoot = new BinNode(origRoot->data);
copyTree(origRoot->left, subtreeRoot->left);
copyTree(origRoot->right, subtreeRoot->right);
//origRoot = new BinNode(subtreeRoot->data);
//copyTree(subtreeRoot->left, origRoot->left);
//copyTree(subtreeRoot->right, origRoot->right);
}
}
复制构造函数的工作很漂亮,但是赋值运算符我未能理解这里需要什么。任何帮助是极大的赞赏!
附言您可能已经注意到我有“origList”,应该将其命名为“origTree”,但是我是从以前为LinkedLists创建的构造函数中借用的。
最佳答案
这个
BST<DataType>& BST<DataType>::operator=(const BST& origList)
应该
BST<DataType>& BST<DataType>::operator=(const BST<DataType>& origList)
在类有以下声明
BST<DataType>& operator=(const BST<DataType>& origList)