2017-04-13 11 views
-1

Ich habe eine Iterator-Klasse, die den Operator ++ definiert:Fehler C2676; Haben Sie Probleme beim Definieren der ++ Operator in einer Klasse binärer Suchbaum in 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); 
      } 
     } 
}; 

ich eine TestBSTIterator Datei sicherstellen müssen, dass es funktioniert:

#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; 
} 

Wenn ich versuche, TestBSTIterator zu laufen bekomme ich die folgende Fehlermeldung:

Fehler C2676: binary ‚++‘: ‚Iterator‘ nicht definiert diesen Operator oder eine Umwandlung in eine Art akzeptabel dem vordefinierten Operator

1> mit

1> [

1> T = std :: string

1>]

Ich habe den "Operator ++" -Funktion in der Iterator-Klasse , so verstehe ich nicht wirklich, was das Problem ist. Ich habe versucht, einfach die Funktion mit einem generischen Typ zu implementieren, d. H. Iteratoroperator ++() {...}, aber das hatte keine Wirkung.

Antwort

1

Sie definieren Iterator operator++(), das ist der Präfix Operator (++iterator), aber Sie verwenden iterator++, den postfix Operator, der mit Iterator operator++(int) definiert ist. Das int wird normalerweise nicht verwendet und wird nur zum Unterscheiden zwischen den zwei Inkrementoperatoren verwendet.

Verwenden Sie entweder ++iterator in Ihrem Code oder definieren Sie den Postfix-Operator.

+0

guten Fang. Dank dafür! – so8857

Verwandte Themen