2017-02-20 96 views
0

返回相同的值,我只是試圖運行的代碼,這個簡單的行:在遞增結構值每次循環

for (Client c : clients) { 
    c.timeSinceLastPacket++; 
    std::cout << c.timeSinceLastPacket << std::endl; 
} 

很不幸,這始終增量後返回1。如果我把打印遞增之前返回0

這裏是我的結構:

struct Client { 
    int timeSinceLastPacket = 0; 
    sf::IpAddress ip; 
    unsigned short port = 0; 
    unsigned short id = 0; 
}; 

我使用SFML。

這是我已經試過:

  • 改變了++到+ = 1
  • 刪除在該分組的值定義爲0(這可以在我的代碼可以看出每一個實例鏈接)
  • 改變了包的價值浮動
  • 我還要提到的是我的初衷是爲了使用SF ::時間,但沒有工作,要麼
  • 如果我更換和客戶C [0]它工作正常

該代碼不是太長,但我不想把它放在問題中。我會在這裏您鏈接到它:

Server.h

Server.cpp

+2

_「代碼不是太長,但我不想把它放在問題中。我會在這裏鏈接到它:「_而不是這樣做,構建一個[MCVE]。 –

+0

把代碼放在外部網站上,你的問題有被封閉的風險 –

回答

10
for (Client c : clients) { 

在這裏,你製作一個副本,名爲c。原件clients不受影響。

如果你想變異原始的元素,使用參考:

for (Client& c : clients) { 
+0

你擊敗了我10秒! –

+0

@DavidLively:29其實;) –

+0

朋友之間3倍的因素是什麼?:) –

4

通過鍵入循環變量爲Client,你正在做的元素的副本在每次迭代在數組中。循環內的更改會更新副本,而不是存儲在clients中的原始項目。

做它,而不是一個參考:

for (Client& c : clients) { 

不像Java或C#,C++默認值類型,而不是引用,所以你必須明確說明您要的引用(或指針,但語法稍微混亂)。

這裏使用非引用類型也會導致一些性能問題,如果類型很複雜,或者對其拷貝構造函數執行重要處理。 (這不是你在這裏列出的類型的問題,但在其他情況下可能是個問題。)