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

时间:2017-04-13 04:13:13

标签: c++ iterator binary-search-tree

我有一个定义++运算符的Iterator类:

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:二进制&#39; ++&#39;:&#39;迭代器&#39;没有定义此运算符或转换为预定义运算符可接受的类型

1&GT;与

1&GT; [

1&GT; T =的std :: string

1&GT; ]

我有&#34;运算符++&#34;在Iterator课程中起作用,所以我不太了解问题所在。我尝试使用泛型类型实现该函数,即Iterator operator ++(){...}但是没有效果。

1 个答案:

答案 0 :(得分:1)

您定义Iterator operator++(),即前缀运算符(++iterator),但您使用iterator++ postfix 运算符,用Iterator operator++(int)定义。 int通常是未使用的,仅用于区分两个增量运算符。

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