gpt4 book ai didi

c++ - 编译时二叉搜索树错误的反向迭代器,表示 "no matching function call for operator=()"

转载 作者:行者123 更新时间:2023-11-28 01:15:29 24 4
gpt4 key购买 nike

我正在尝试将一个 reverse_iterator 类嵌套到我的二进制搜索树中,这里是该类:

template <class T>
class BST
{
public:
BST() { root = NULL; numElements = 0; }
BST(const BST <T> & rhs);
~BST() { /*deleteBtree(root)*/ }
BST & operator = (const BST <T> & rhs);
int size() const { return numElements; }
bool empty() const
{
if ( root == NULL )
{
return true;
}
else
{
return false;
}
}
void clear() { root = NULL; }

void insert( const T & t);

class iterator;
iterator find(const T & t);

iterator begin() { return iterator (root);}
iterator end() {return iterator (NULL); }
void erase(iterator it);

class reverse_iterator;
reverse_iterator rfind(const T & t);
reverse_iterator rbegin() {return reverse_iterator (NULL); }
reverse_iterator rend() { return reverse_iterator (root); }
void rerase(reverse_iterator it);

private:


void deleteNode(BNode <T> del, bool right);
void deletlBinaryTree(BNode <T> del);
void copyBinaryTree(BNode <T> src, BNode <T> dest);


BNode <T> * root;
int numElements;


};

这是我的 reverse_iterator 类:

template <class T>
class BST <T> :: reverse_iterator
{
public:
reverse_iterator() { pNode = NULL; }
reverse_iterator(BNode <T> * p) { pNode = p; }
reverse_iterator(const reverse_iterator & rhs) {*this = rhs; }

reverse_iterator & operator =(const reverse_iterator & it)
{
this->pNode = it.pNode;
return *this;
}
bool operator ==(const reverse_iterator & it) const
{ return it.pNode != this->pNode;}

bool operator !=(const reverse_iterator & it) const
{ return it.pNode == this->pNode;}

reverse_iterator & operator ++();

reverse_iterator & operator --();

T & operator *() const { return pNode->data; }

private:
BNode <T> * pNode;
};

在我的主函数中,我试图在这个循环中使用我的迭代器:

for (it = tree2.rbegin(); it != tree2.rend(); --it)
cout << " " << *it;
cout << " }\n";

我无法更改主函数,所以我需要我的类 reverse_iterator 函数来匹配主函数的调用。但是我收到了这个错误:

assignment09.cpp:225:30: error: no match for ‘operator=’ (operand types are ‘BST<double>::iterator’ and ‘BST<double>::reverse_iterator’)
for (it = tree2.rbegin(); it != tree2.rend(); --it)

我还没有写完二叉搜索树类中的所有函数,此时我只是想让程序编译。有什么建议么?我收到此错误消息:

最佳答案

But I am getting this error: assignment09.cpp:225:30: error: no match for ‘operator=’ (operand types are ‘BST::iterator’ and ‘BST::reverse_iterator’)

它表示没有 operator=,其中运算符是 BST::iteratorBST::reverse_iterator

换句话说,您正在尝试将 BST::reverse_iterator 分配给类型为 BST::iterator 的变量。因为他们是不同的类(class),所以你不能那样做。将您的 BST::reverse_iterator 存储在 BST::reverse_iterator 类型的变量中。

关于c++ - 编译时二叉搜索树错误的反向迭代器,表示 "no matching function call for operator=()",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58861532/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com