错误 C2676;在C++的二叉搜索树类中定义 ++ 运算符时遇到问题

Error C2676; Having trouble defining the ++ operator in a Binary Search Tree class in C++

本文关键字:定义 运算符 问题 遇到 搜索树 C2676 C++ 错误      更新时间:2023-10-16

我有一个定义++运算符的迭代器类:

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=标准::字符串

1> ]

我在迭代器类中有"运算符++"函数,所以我真的不明白问题是什么。我尝试简单地使用泛型类型实现该函数,即迭代器运算符++(( { ... },但没有效果。

你定义了 Iterator operator++() ,它是前缀运算符 (++iterator (,但你使用 iterator++后缀运算符,用 Iterator operator++(int) 定义。 int 通常未使用,仅用于区分两个增量运算符。

在代码中使用++iterator,或定义后缀运算符。