在for循环中递增struct值每次都返回相同的值

时间:2017-02-20 15:32:48

标签: c++ for-loop struct

我只想尝试运行这一简单的代码:

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

不幸的是,增量后总会返回1。如果我在增量之前放置一个打印件,它将返回0.

这是我的结构:

arrowObj = arrow.Arrow.strptime('2017-02-20 10:00:00', '%Y-%m-%d %H:%M:%S' , 'US/Eastern')

arrowObj.to('UTC') or arrowObj.to('local') 

我正在使用SFML。

以下是我尝试的内容:

  • 将++更改为+ = 1
  • 删除了数据包的值定义为0的每个实例(这可以在我链接的代码中看到)
  • 将数据包的值更改为float
  • 我还应该提一下,我的初衷是使用sf :: Time,但那不起作用
  • 如果我用客户端[0]替换c,它可以正常工作

代码不长,但我不想把它放在问题中。我会在这里链接到你:

Server.h

Server.cpp

2 个答案:

答案 0 :(得分:10)

for (Client c : clients) {

在这里制作一份名为c的副本。 clients中的原文不受影响。

如果要改变原始元素,请使用引用:

for (Client& c : clients) {

答案 1 :(得分:4)

通过键入循环变量Client,您可以在每次迭代时复制数组中的元素。循环内的更改会更新副本,而不是clients中存储的原始项目。

改为使用它作为参考:

for (Client& c : clients) {

与Java或C#不同,C ++默认使用值类型而不是引用,因此必须明确声明您需要引用(或指针,但语法稍微混乱)。

如果类型很复杂,或者对其复制构造函数执行重要处理,则此处使用非引用类型也可能导致一些性能问题。 (这并不是您在此处概述的类型的关注点,但在其他情况下可能是一个问题。)