我无法编译:
//cygwin g++ 4.9.2
std::vector<int> v;
std::vector<int>::iterator i;
i.operator==(v.begin()); //error: ...has no member named 'operator=='
有人请让我知道发生了什么。
答案 0 :(得分:3)
为什么你认为这样的成员函数存在?比较运算符不必是成员函数。
它也可以定义为全局函数:
template <class T>
bool operator(typename vector<T>::iterator left, typename vector<T>::iterator right)
{
//...
}
在您的情况下,这可能不一定有效:
i.operator==(v.begin());
虽然这总是有效:
i == v.begin();
此外,如果你真的想要使用这种不自然的语法,你可以这样称呼它:
operator==(i, v.begin());
但请注意,由于您没有初始化i
,因此结果可能非常难以预测。
答案 1 :(得分:1)
否,没有。
有一个自由函数需要两个这样的迭代器。
#include <vector>
int main()
{
std::vector<int> v;
std::vector<int>::iterator i;
operator==(i, v.begin()); // OK
}
只需以正常方式调用==
,并让i
在您进入时引用某些内容!
答案 2 :(得分:1)
为什么期望这样做?
std::vector::iterator
是Random Access Iterator,必须与==
相当(即必须Equality comparable,与所有Input Iterators一样),但不需要有一个成员operator==
。非会员就足够了。