Итак, я исхожу из слова C#, которое пытается запрограммировать мой фотоснимк на 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, как если бы он смотрел на новый объект или что-то в этом роде. Что мне здесь не хватает? Почему значение поля не сохраняется на объекте между циклами в цикле?