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