错误C2676;具有限定++运算符的二叉搜索树类在C++
问题描述:
麻烦
我有一个迭代器类,它定义了++运算符:错误C2676;具有限定++运算符的二叉搜索树类在C++
template<typename T>
class Iterator : public std::iterator<std::forward_iterator_tag, T>
{
public:
Iterator(TreeNode<T>* p)
{
if (p == nullptr)
current = -1; // The end
else
{
// Get all the elements in inorder
treeToVector(p);
current = 0;
}
}
Iterator operator++()
{
current++;
if (current == v.size())
current = -1; // The end
return *this;
}
T& operator*()
{
return v[current];
}
bool operator==(const Iterator<T>& iterator) const
{
return current == iterator.current;
}
bool operator!=(const Iterator<T>& iterator) const
{
return current != iterator.current;
}
private: int current;
vector<T> v;
void treeToVector(TreeNode<T>* p)
{
if (p != nullptr)
{
treeToVector(p->left);
v.push_back(p->element);
treeToVector(p->right);
}
}
};
我有一个TestBSTIterator文件,以确保它的工作原理:
#include "stdafx.h"
#include <iostream>
#include <string>
#include <algorithm>
#include "BST.h"
using namespace std;
string toUpperCase(string& s)
{
for (size_t i = 0; i < s.length(); i++)
s[i] = toupper(s[i]);
return s;
}
int main()
{
// Create a binary search tree for strings
BST<string> tree;
// Add elements to the tree
tree.insert("America");
tree.insert("Canada");
tree.insert("Russia");
tree.insert("France");
// Traverse a binary tree using iterators
for (Iterator<string> iterator = tree.begin();
iterator != tree.end(); iterator++)
{
cout << toUpperCase(*iterator) << " ";
}
cout << endl << "Min element is " <<
*min_element(tree.begin(), tree.end()) << endl;
cout << "Max element is "
<< *max_element(tree.begin(), tree.end()) << endl;
return 0;
}
当我尝试运行TestBSTIterator我得到以下错误:
错误C2676:二进制“++”:“游标”不定义这种操作或转换到类型接受的预先规定的操作
1>使用
1> [
1> T =的std :: string
1>]
我有 “操作符++” 功能的迭代器类,所以我不太了解问题所在。我试着简单地用一个泛型类型实现函数,即迭代器运算符++(){...}但是没有效果。
答
你定义Iterator operator++()
,这是前缀运营商(++iterator
),但是你用iterator++
,该后缀运营商,这与Iterator operator++(int)
定义。 int通常是未使用的,仅用于区分两个增量运算符。
在代码中使用++iterator
,或者定义postfix操作符。
好抓。感谢那! – so8857