gpt4 book ai didi

对象上的 C++ 字段值未保留

转载 作者:行者123 更新时间:2023-11-30 03:44:10 26 4
gpt4 key购买 nike

所以我来自 C# 词,试图在 C++ 中对我的粒子光子进行编程。我正在尝试利用一个类来帮助更好地组织数据。

我定义了一个类叫Lane:

#ifndef Lane_h
#define Lane_h
#include "application.h"

class Lane {

public:

Lane(int sensorId, String laneName);
Lane();

int
readSensor(void),
getWinningOrder(void);

bool
hasFinished(void);

void
setWinningOrder(int order);

String
getName();

int
winningOrder;


private:
int
sensor;

String
name;

};

#endif

然后我做了cpp文件:

#include "Lane.h"
#include "application.h"

Lane::Lane(int sensorId, String laneName){
sensor = sensorId;
name = laneName;
winningOrder = 0;
}

Lane::Lane(){
winningOrder = 0;
}

int Lane::readSensor(){
int value = analogRead(sensor);
return value;
}

String Lane::getName(){
return name;
}

bool Lane::hasFinished(void){
Particle.publish("DEBUG", name + " has a winning order of: " + String(winningOrder));
return winningOrder != 0;
}

到目前为止一切顺利。

现在在我的 .ino 文件中,Particle 执行我读取的循环并设置我的字段。 (我稍微压缩了这个文件以使其更易于阅读。)

// This #include statement was automatically added by the Particle IDE.
#include "Lane.h"

Lane lanes[] = {
Lane(A5, "Lane 1"),
Lane(A4, "Lane 2"),
Lane(A3, "Lane 3"),
Lane(A2, "Lane 4")
};
int winningPlace = 1;

void setup() {

}

void loop() {
for (uint32_t i = 0; i < arraySize(lanes); i++) {
Lane lane = lanes[i];
int value = lane.readSensor();

if(value + sensitivity < initalValues[i] && !lane.hasFinished()){
Particle.publish("DEBUG", lane.getName() + " pre-set field value is " + lane.winningOrder);
lane.winningOrder = winningPlace++;
Particle.publish("DEBUG", lane.getName() + " set field value is " + lane.winningOrder);
}

}
}

第一次通过循环时,预设调试值返回 0,设置值按预期返回 1。下一次循环进入 if 语句争议 !lane.hasFinished()。预设返回 0,就好像它正在查看一个新对象或其他东西一样。我在这里错过了什么?为什么该字段的值不会在循环中的循环之间持续存在于对象上?

最佳答案

Lane lane = lanes[i];

复制 lanes[i] - 对 lanes 的任何修改都不会影响该元素。试试 reference :

Lane &lane = lanes[i];

lanelanes[i] 的别名。使用 lane 就好像您正在使用 lanes[i] 并且通过分配给 lane.winningOrder,您实际上将分配给引用的 lanes[i]winningOrder。没有拷贝。

也开始使用member initialization lists而不是成员函数的赋值和 const 限定符。

关于对象上的 C++ 字段值未保留,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35672115/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com