循环返回多个值
returning multiple value in a loop
在我的程序中,我尝试在“Durchfluss”方法中执行操作后 return 两个值。然后这些值应该显示在循环中。但是当我显示它们时,f_ml1 得到 0,f_ml 得到 170。为什么我得到的变量 f_ml1 为 0?错误在哪里?此方法一直在循环调用。
class Sensor {
float _flowRateTrinkwasser;
unsigned int _f_ml;
unsigned long _wasserMengeTrinkwasser;
float _flowRateReinwasser;
unsigned int _f_ml1;
unsigned long _wasserMengeReinwasser;
public:
Sensor( float flowRateTrinkwasser, unsigned int f_ml, unsigned long wasserMengeTrinkwasser, float flowRateReinwasser, unsigned int f_ml1, unsigned long wasserMengeReinwasser) { // Konstruktor
_flowRateTrinkwasser = flowRateTrinkwasser;
_f_ml = f_ml;
_wasserMengeTrinkwasser = wasserMengeTrinkwasser;
_flowRateReinwasser = flowRateReinwasser;
_f_ml1 = f_ml1;
_wasserMengeReinwasser = wasserMengeReinwasser;
}
Durchfluss() {
_flowRateTrinkwasser = 120; // Formel zur Berechnung von Flow Rate
_wasserMengeTrinkwasser = 50;
_f_ml = _flowRateTrinkwasser + _wasserMengeTrinkwasser ;
_flowRateReinwasser = 70;
_wasserMengeReinwasser = 40;
_f_ml1 = _flowRateReinwasser + _wasserMengeReinwasser;
return (_f_ml1, _f_ml);
}
};
#include "test.h"
//Durchflussmessung Variable Trinkwasser//
float flowRateTrinkwasser;
unsigned int f_ml;
unsigned long wasserMengeTrinkwasser;
//Durchflussmessung Variable Trinkwasser//
//Durchflussmessung Variable Reinwasser//
float flowRateReinwasser;
unsigned int f_ml1;
unsigned long wasserMengeReinwasser;
//Durchflussmessung Variable Reinwasser//
Sensor sensorOne( flowRateTrinkwasser, f_ml, wasserMengeTrinkwasser, flowRateReinwasser, f_ml1, wasserMengeReinwasser ); // Objekt vom Konstruktor Sensor1
void setup() {
Serial.begin(9600);
}
void loop() {
(f_ml1, f_ml) = sensorOne.Durchfluss();
Serial.println(f_ml1);
Serial.println(f_ml);
delay(1000);
}
您需要声明 type Durchfluss()
应该 return 并正确初始化 return 值。
示例:
// define a return type to use with `Durchfluss`
struct dfret {
unsigned int ml1;
unsigned int ml;
};
dfret Durchfluss() { // declare the function to return a `dfret`
// calculate ...
return {_f_ml1, _f_ml}; // note how to initialize `dfret`
}
我建议删除全局变量 f_ml1
和 f_ml
并在 loop()
中声明它们。
然后在 loop()
中,如果您启用了 C++17,则可以使用 结构化绑定 将 f_ml1
和 f_ml
绑定到returned dfret
s 成员变量:
void loop() {
auto[f_ml1, f_ml] = sensorOne.Durchfluss();
// or if you don't need to change `f_ml1` or `f_ml`:
//const auto&[f_ml1, f_ml] = sensorOne.Durchfluss();
}
如果您尚未启用 C++17:
void loop() {
dfret rv = sensorOne.Durchfluss();
auto& f_ml1 = rv.ml1;
auto& f_ml = rv.ml;
}
坦率地说,我会添加一对 getter 方法并直接从您的传感器对象读取 f_ml1 和 f_ml:
class Sensor {
...
public :
int get_f_ml1 () { return f_ml1; }
int get_f_ml () { return f_ml; }
...
}
void loop() {
sensorOne.Durchfluss();
Serial.println(sensorOne.get_f_ml1());
Serial.println(sensorOne.get_f_ml());
delay(1000);
}
在我的程序中,我尝试在“Durchfluss”方法中执行操作后 return 两个值。然后这些值应该显示在循环中。但是当我显示它们时,f_ml1 得到 0,f_ml 得到 170。为什么我得到的变量 f_ml1 为 0?错误在哪里?此方法一直在循环调用。
class Sensor {
float _flowRateTrinkwasser;
unsigned int _f_ml;
unsigned long _wasserMengeTrinkwasser;
float _flowRateReinwasser;
unsigned int _f_ml1;
unsigned long _wasserMengeReinwasser;
public:
Sensor( float flowRateTrinkwasser, unsigned int f_ml, unsigned long wasserMengeTrinkwasser, float flowRateReinwasser, unsigned int f_ml1, unsigned long wasserMengeReinwasser) { // Konstruktor
_flowRateTrinkwasser = flowRateTrinkwasser;
_f_ml = f_ml;
_wasserMengeTrinkwasser = wasserMengeTrinkwasser;
_flowRateReinwasser = flowRateReinwasser;
_f_ml1 = f_ml1;
_wasserMengeReinwasser = wasserMengeReinwasser;
}
Durchfluss() {
_flowRateTrinkwasser = 120; // Formel zur Berechnung von Flow Rate
_wasserMengeTrinkwasser = 50;
_f_ml = _flowRateTrinkwasser + _wasserMengeTrinkwasser ;
_flowRateReinwasser = 70;
_wasserMengeReinwasser = 40;
_f_ml1 = _flowRateReinwasser + _wasserMengeReinwasser;
return (_f_ml1, _f_ml);
}
};
#include "test.h"
//Durchflussmessung Variable Trinkwasser//
float flowRateTrinkwasser;
unsigned int f_ml;
unsigned long wasserMengeTrinkwasser;
//Durchflussmessung Variable Trinkwasser//
//Durchflussmessung Variable Reinwasser//
float flowRateReinwasser;
unsigned int f_ml1;
unsigned long wasserMengeReinwasser;
//Durchflussmessung Variable Reinwasser//
Sensor sensorOne( flowRateTrinkwasser, f_ml, wasserMengeTrinkwasser, flowRateReinwasser, f_ml1, wasserMengeReinwasser ); // Objekt vom Konstruktor Sensor1
void setup() {
Serial.begin(9600);
}
void loop() {
(f_ml1, f_ml) = sensorOne.Durchfluss();
Serial.println(f_ml1);
Serial.println(f_ml);
delay(1000);
}
您需要声明 type Durchfluss()
应该 return 并正确初始化 return 值。
示例:
// define a return type to use with `Durchfluss`
struct dfret {
unsigned int ml1;
unsigned int ml;
};
dfret Durchfluss() { // declare the function to return a `dfret`
// calculate ...
return {_f_ml1, _f_ml}; // note how to initialize `dfret`
}
我建议删除全局变量 f_ml1
和 f_ml
并在 loop()
中声明它们。
然后在 loop()
中,如果您启用了 C++17,则可以使用 结构化绑定 将 f_ml1
和 f_ml
绑定到returned dfret
s 成员变量:
void loop() {
auto[f_ml1, f_ml] = sensorOne.Durchfluss();
// or if you don't need to change `f_ml1` or `f_ml`:
//const auto&[f_ml1, f_ml] = sensorOne.Durchfluss();
}
如果您尚未启用 C++17:
void loop() {
dfret rv = sensorOne.Durchfluss();
auto& f_ml1 = rv.ml1;
auto& f_ml = rv.ml;
}
坦率地说,我会添加一对 getter 方法并直接从您的传感器对象读取 f_ml1 和 f_ml:
class Sensor {
...
public :
int get_f_ml1 () { return f_ml1; }
int get_f_ml () { return f_ml; }
...
}
void loop() {
sensorOne.Durchfluss();
Serial.println(sensorOne.get_f_ml1());
Serial.println(sensorOne.get_f_ml());
delay(1000);
}