2012-02-18 124 views
2

我目前正在为我的链表重载==操作符。我有我的头操作员设置类似如下:已重载==函数没有被调用

class sqrlst 
{ 
public: 
std::vector<int> vlist; 

bool operator == (iterator const & rhs) 
{ 
    return this->iter == rhs.iter; 
}; 

然后我在我的头文件中创建一个方法,用下面的代码

void test() 
    { 
     bool flag; 
     if (vlist.begin()==vlist.begin()) 
     { 
      flag=true; 
     } 
    }; 
}; 

然而,当这种方法被称为它不走当它碰到if语句时,我的重载==操作符函数。当我将调试点放在超载函数上时,它表示不会到达该行。

任何提示或建议,非常感谢。谢谢!

编辑:vlist是一个整数列表。

+0

'begin()'返回什么类型? – tzaman 2012-02-18 04:29:27

+0

@tzaman一个迭代器 – Johnston 2012-02-18 04:30:46

+1

它看起来像你为'sq_list'定义'operator =='。但是你正在执行的比较看起来像是'iterators'。如果是这样,'operator =='不会被调用。如果你执行'vlist == vlist',它会被调用。 – Naveen 2012-02-18 04:31:14

回答

3

那么,std::vector成员函数begin()end()返回std::vector<T>::iterator类型或`std::vector<T>::const_iterator的迭代器,这取决于是否矢量对象上是const或非const。不管它是什么,迭代器类型都不是由你定义的。超载==在你的班级sqrlist什么都不做。过载==应该是vector的迭代器类的成员,您可以编辑而不是

另请注意,vector的迭代器类已经超载==!=运算符。因此,当您比较使用==的迭代器时,它将调用vector的迭代器类的成员函数。

+1

我相信你的正确,它应该是一个迭代器。我改了它,我添加了const,但我的断点仍然表示不会被达到 – Johnston 2012-02-18 04:32:54

+0

vlist是我的值列表,sq_list是我的班级 - 我的错误是因为之前有 – Johnston 2012-02-18 04:33:52

+0

@Mankarse:好的!编辑。 – Nawaz 2012-02-18 04:35:15