2014-02-15 60 views
0
int CardDeck::inOrder(){ 
    deque<int>::const_iterator i; 
    for (i = nameofdeque.begin(); i != nameofdeque.end(); ++i){ 
      if (nameofdeque[i] >= nameofdeque[i+1]){ 
      return 0; 
     } 
    } 
    return 1; 
} 

此代碼的迭代器提供了4號線說:「CardDeck.cpp一個錯誤:37:錯誤:之前預計類型說明符‘[’令牌 CardDeck.cpp:37 ::太很多爭論。錯誤在一個deque

我想知道如何解決這個問題。 我想: 「如果(nameofdeque.at(I)> = nameofdeque.at第(i + 1){」 但無濟於事。

任何非常感謝, 謝謝!

回答

2

operator[]需要size_t即一個索引,但你傳遞一個迭代器給它。如果你想用迭代器來做到這一點,然後4號線更改爲這個

if (*i >= *(i+1)) { 

爲了避免這種混淆,迭代器通常命名爲iter,而不是用於循環索引或下標,i通常的標識符。

如果你真的想這樣做沒有迭代器但具有索引,那麼你可以在功能更改爲

int CardDeck::inOrder() { 
    for (size_t i = 1u; i < nameofdeque.size(); ++i) { 
     if (nameofdeque[i - 1] >= nameofdeque[i]) { // you cannot do this for the first element, hence the loop's variable starts at 1 to offset this 
      return 0; 
     } 
    } 
    return 1; 
} 
+1

你的循環將有越界訪問。 – selalerer

+0

謝謝,現在修復:) – legends2k

+0

你沒有考慮到deque的大小可能是0 :-) – selalerer

2

I terator不是deque的索引,您使用*i來訪問它指向的成員。

2

在你的代碼i是一個迭代器,而不是一個索引(整數)。 operator[]要求索引(整數)作爲參數。