错误 C2676;在C++的二叉搜索树类中定义 ++ 运算符时遇到问题
Error C2676; Having trouble defining the ++ operator in a Binary Search Tree class 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);
}
}
};
我有一个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
,或定义后缀运算符。
相关文章:
- 在 C++ 的自定义运算符中删除与删除[](不同于常见的删除与删除[]问题)
- 自定义运算符重载C++,无开销
- 如何为缺少预定义运算符而不扩展命名空间"std"的标准类型定义运算符>> (istream &, ...)?
- 如何使用C++将MXNET自定义运算符构建到单独的库/包中?
- 模板类的用户定义运算符上的 C++ 隐式转换
- 什么是编程语言支持定义您自己的自定义运算符?
- 如何在Qt中为矩阵类定义[ ][ ]运算符?
- 在 c++ 迭代器中,我应该同时定义运算符== 和运算符!=吗?
- 在 rxcpp 中创建自定义运算符
- 错误 C2676;在C++的二叉搜索树类中定义 ++ 运算符时遇到问题
- std::map :使用自定义运算符时更新密钥
- 最初定义运算符C++在哪里
- 如何在Tensorflow Lite中添加自定义运算符
- 如何在 rxcpp 自定义运算符中正确推断泛型
- 在模板化类之外定义运算符重载
- 为类定义之外的模板类定义运算符[]()(数组订阅)
- 是否可以在类定义之外定义运算符[]()(数组订阅)
- C++ 重新定义运算符<() 和运算符!=()
- 如何将上下文信息传递给自定义运算符<<适用于 std::iostream
- 无法在C++中定义++运算符,这里有什么问题?