gpt4 book ai didi

c++ - 类中的变量正在自行重置

转载 作者:行者123 更新时间:2023-11-28 05:33:15 24 4
gpt4 key购买 nike

我正在为 Arduino 开发 LED 推子。为此,我写了一个定义一切的类。但是从昨天开始我有一个问题,我无法解决。到目前为止,这是我的代码:

class LED {
int pins[4];
int r = 0;
int g = 0;
int b = 0;
int task = 1;
int taskgoal = 255;
public:
void newTask() {
...
}
void newGoal() {
...
}
boolean taskFinished() {
...
}
void runTask() {
if (taskFinished()) {
newTask();
newGoal();
cout << "New Task and new Goal.\n";
}
int current;
switch (task) {
...
}
if (current < taskgoal) {
switch (task) {
case 1:
cout << r << "+1" << "\n";
this->redefine(this->r + 1, this->g, this->b);
cout << r << "+1" << "\n";
break;
case 2:
cout << g << "+1" << "\n";
this->redefine(this->g, this->g + 1, this->b);
break;
case 3:
cout << b << "+1" << "\n";
this->redefine(this->r, this->g, this->b + 1);
break;
}
} else if (current > taskgoal) {
...
}
analogWrite(pins[0], this->r);
analogWrite(pins[1], this->g);
analogWrite(pins[2], this->b);
return;
}
void ledinit(int p[]) {
this->r = random(1, 255);
this->g = random(1, 255);
this->b = random(1, 255);
for (int i = 1; i < 3; i++) {
pins[i] = p[i];
pinMode(pins[i], OUTPUT);
}
pins[3] = p[3];
analogWrite(pins[0], this->r);
analogWrite(pins[1], this->g);
analogWrite(pins[2], this->b);
analogWrite(pins[3], LOW);
newTask();
newGoal();
runTask();
return;
}
void redefine(int rr, int gg, int bb) {
r = rr;
g = gg;
b = bb;
return;
}
};
std::vector< LED >leds;

void setup() {
Serial.begin(9600);
LED l1;
int l1pins[4] = {11, 9, 8, 10};
l1.ledinit(l1pins);
leds.push_back(l1);
}

void loop() {
for (LED l : leds) {
l.runTask();
cout << "Run Task" << "\n";
}
delay(100);
}

(粘贴:http://pastebin.com/pQMEkG1a)在第 76 行中,我尝试使用函数重新定义将 r 值加 1。我也直接用 this->r++;this->r += 1; 尝试过,但结果都是一样的。它会将 1 添加到 r 变量。但是在下一个循环中,它又是与开始时相同的值。这是输出的样子:

Run Task
45+1
46+1
Run Task
45+1
46+1
Run Task
45+1
46+1

但是为什么每次都是45呢?我认为这是我很容易犯的错误,但我找不到。

最佳答案

查看代码,我希望您的问题出在for (LED l : leds)

这个基于范围的 for 循环遍历 LED vector ,从每个元素中获取一个拷贝,您将在其上运行任务。

我建议编写以下内容:for (LED &l : leds) 以防止复制。

由于您的编译器看起来支持 C++11,您可能希望通过向类 LED 添加以下成员函数来防止将来出现类似问题:LED(const LED &) = delete; 可能还有来自 the rule of five 的其他一些人.这将防止任何来自 led 的复制。可能您需要一些移动构造函数才能将 LED 添加到 vector 中。

关于c++ - 类中的变量正在自行重置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38930792/

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