循环返回多个值

发布于 2025-01-09 13:10:05 字数 1893 浏览 3 评论 0原文

在我的程序中,我尝试在“Durchfluss”方法中执行操作后返回两个值。然后这些值应该显示在循环中。但是当我显示它们时,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);
}

In my program I try to return two values after performing operations in the "Durchfluss" method. These values should then be displayed in the loop. but when I display them I get 0 for f_ml1 and 170 for f_ml. why do I get 0 for the variable f_ml1? where is the error? This Method has been calling in a loop.

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);
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

戴着白色围巾的女孩 2025-01-16 13:10:05

坦率地说,我会添加一对 getter< /a> 方法并直接从传感器对象读取 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);
}

Frankly, I would add a pair of getter methods and read f_ml1 and f_ml directly from your sensor object:

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);
}
你没皮卡萌 2025-01-16 13:10:05

您需要声明 Durchfluss() 应该返回什么类型,并正确初始化该返回值。

示例:

// 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_ml1f_ml 并在 loop() 中声明它们。

然后在 loop() 中,如果您启用了 C++17,则可以使用结构化绑定来绑定 f_ml1f_ml 到返回的 dfret 成员变量:

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;
}

You need to declare what type Durchfluss() is supposed to return and initialize that return value properly.

Example:

// 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`
}

I recommend removing the global variables f_ml1 and f_ml and declare them in loop().

Then in loop() if you've enabled C++17 you can use structured bindings to bind f_ml1 and f_ml to the returned dfrets member variables:

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();
}

If you haven't enabled C++17:

void loop() {
    dfret rv = sensorOne.Durchfluss();
    auto& f_ml1 = rv.ml1;
    auto& f_ml = rv.ml;
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文