2

我目前正在创建一个方形列表,其中一个要求是重载前缀和后缀++运算符。重载++运算符以递增迭代器

我试着重载我的.hpp文件中的++运算符以增加一个迭代器。但是,在调用++运算符时,它不会调用重载的代码,只是使用默认值。

iterator& operator ++() { // pre-increment 
     std::list<int>::iterator i = list_Values.begin(); 
     advance(i,1); 
     return &*i; 
    } 

    iterator operator ++ (int) { // post-increment 
     std::list<int>::iterator i = list_Values.begin(); 
     advance(i,1); 
     return &*i; 
    } 

我尝试调用++运算符是这样的:

int* test = sqrList.begin(); 
    ++test; 

    test++; 
+2

默认?没有默认的'operator ++'! – Pubby 2012-02-21 22:25:42

+0

@Pubby好吧,当我通过它时,它会进入标准库 – user1219627 2012-02-21 22:26:42

+0

如果我们可以看到完整的类定义,特别是如果您的类型具有基类时,这将有所帮助。 – ildjarn 2012-02-21 22:27:25

回答

2
int* test = sqrList.begin(); 
++test; 
test++; 

你递增int*,并且因为没有int*类来扩展,你不可能有这种类型实际上创建运营商。

改为为正确的类型创建运算符。你可能是想制作你自己的Iterator类型。

1

您必须声明里面的类的运营商。

class Iterator 
{ 
public: 
    Iterator& operator ++() 
    { 
     return *this; 
    } 
    Iterator operator ++ (int) 
    { 
     return *this; 
    } 
}; 

另外,你为什么使用return &*i;

请注意,这些操作符需要在Iterator类中声明,而不是在容器中声明。

+0

我已经尝试过,它似乎仍然没有进入我的重载功能 – user1219627 2012-02-21 22:28:04

+0

Downvote的原因是什么? – 2012-02-21 22:32:13

+0

wasn我downvoted。无论如何,我认为这是我需要做的......我会试一试并发表评论 – user1219627 2012-02-21 22:34:16