首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >警告:返回一个值的语句,在函数返回'void‘[-fpermissive]返回高度;

警告:返回一个值的语句,在函数返回'void‘[-fpermissive]返回高度;
EN

Stack Overflow用户
提问于 2022-03-15 15:12:02
回答 2查看 2.2K关注 0票数 -1

我对arduino很陌生,我不知道为什么会出现这个错误。任何帮助都将不胜感激。上述错误出现在设置函数中。我对功能还没有太大的经验,因为我只是在几个星期前才开始研究这些功能。

代码语言:javascript
复制
#include <Adafruit_BMP280.h> // For the purple BMP280 sensor board
#include <SoftwareSerial.h>


// Purple BMP280 Sensor Board
Adafruit_BMP280 bmp; //use I2C interface 
Adafruit_Sensor *bmp_temp = bmp.getTemperatureSensor();
Adafruit_Sensor *bmp_pressure = bmp.getPressureSensor();

float temp;
float pressure;
float calculate_altitude(float temp, float pressure);
float altitude;
float altitude1;
float altitude2;
float altitude3;
float x;
float y;
float z;

  // Initialising variables


void setup() {
  //Setup for purple BMP280
 Serial.begin(300);
 
Serial.println(F("BMP280 Sensor event test"));

if (!bmp.begin()) {
  Serial.println(F("Could not find a valid BMP280 sensor, check wiring!"));
  while (1) delay(10);
}

//Default settings from datasheet
bmp.setSampling(Adafruit_BMP280::MODE_NORMAL, //Opertaing Mode
Adafruit_BMP280::SAMPLING_X2, //Temp. oversampling
Adafruit_BMP280::SAMPLING_X16, //Pressure oversampling
Adafruit_BMP280::FILTER_X16, //Filtering
Adafruit_BMP280::STANDBY_MS_500); //Standby time

bmp_temp->printSensorDetails();


 //Calculation for altitude using temperature and pressure values
float calculate_altitude(float temp, float pressure);
{
 float altitude;
 
altitude1 = 1013.25/(pressure);
altitude2 = pow(altitude1,0.190222560);
altitude3 = altitude2-1;
altitude = (altitude3*(temp +273.15))/0.0065;

return altitude;
}
}
void loop() {

  //Obtaining temperature and pressure events off BMP280
sensors_event_t temp_event, pres_event;
bmp_temp->getEvent(&temp_event);
bmp_pressure->getEvent(&pres_event);

//Taking temperature and pressure values from the events
temp = temp_event.temperature;
pressure = pres_event.pressure;

altitude = calculate_altitude(temp, pressure);



//Reading acceleration values in X, Y and Z axis directions from accelerometer
x = analogRead(A1);
y = analogRead(A2);
z = analogRead(A3);

  Serial.print(" temperature = ");
  Serial.print(temp); //Print temperature value
  Serial.print(",");
    Serial.print(" pressure = ");
  Serial.print(pressure); //Print pressure value
  Serial.print(",");
    Serial.print(" altitude = ");
  Serial.print(altitude); //Read altitude value
  Serial.print(",");
    Serial.print(" x axis acceleration = ");
  Serial.print(x);  //Read acceleration in X direction
  Serial.print(",");
  Serial.print(" y axis acceleration = ");
   Serial.print(y);  //Read acceleration in Y direction
  Serial.print(",");
  Serial.print(" z axis acceleration = ");
  Serial.println(z); //Read acceleration in Z direction
 delay(100);
}

我还在循环函数中得到这个错误:对`calculate_altitude(float,float)‘的未定义引用。如果这一点可以解释的话,我就不明白它意味着什么,也不明白如何解决这个问题。

EN

回答 2

Stack Overflow用户

发布于 2022-03-15 15:44:03

根据C标准(6.8.6.4返回声明)

带表达式的返回语句不应出现在返回类型为

的函数中。没有表达式的返回语句只能出现在返回类型为whose的函数中。

函数setup声明为返回类型void,它有一个带有表达式的返回语句。

代码语言:javascript
复制
void setup() {
  //...
 //Calculation for altitude using temperature and pressure values
float calculate_altitude(float temp, float pressure);
{
 float altitude;
 
altitude1 = 1013.25/(pressure);
altitude2 = pow(altitude1,0.190222560);
altitude3 = altitude2-1;
altitude = (altitude3*(temp +273.15))/0.0065;

return altitude;
}
}

这似乎是一个错误的结果。似乎您正在尝试定义函数calculate_altitude,并错误地将其放置在函数setup中。但是由于分号

代码语言:javascript
复制
float calculate_altitude(float temp, float pressure);
                                                   ^^^

编译器将其视为块作用域函数声明,因此返回语句属于函数setup,而不是函数calculate_altitude

这种错误的原因是错误的代码格式。

票数 0
EN

Stack Overflow用户

发布于 2022-03-15 15:46:47

有了正确的缩进和我在上面的注释中描述的更正,您的代码应该是这样的:

代码语言:javascript
复制
#include <Adafruit_BMP280.h> // For the purple BMP280 sensor board
#include <SoftwareSerial.h>

// Purple BMP280 Sensor Board
Adafruit_BMP280 bmp; //use I2C interface 
Adafruit_Sensor *bmp_temp = bmp.getTemperatureSensor();
Adafruit_Sensor *bmp_pressure = bmp.getPressureSensor();

float temp;
float pressure;
float calculate_altitude(float temp, float pressure);
float altitude;
float altitude1;
float altitude2;
float altitude3;
float x;
float y;
float z;

  // Initialising variables
void setup()
{
    //Setup for purple BMP280
    Serial.begin(300);
    Serial.println(F("BMP280 Sensor event test"));
    if (!bmp.begin()) {
        Serial.println(F("Could not find a valid BMP280 sensor, check wiring!"));
        while (1) delay(10);
    }
} // this close-brace was missing

//Default settings from datasheet
bmp.setSampling(Adafruit_BMP280::MODE_NORMAL, //Opertaing Mode
Adafruit_BMP280::SAMPLING_X2, //Temp. oversampling
Adafruit_BMP280::SAMPLING_X16, //Pressure oversampling
Adafruit_BMP280::FILTER_X16, //Filtering
Adafruit_BMP280::STANDBY_MS_500); //Standby time

bmp_temp->printSensorDetails();

//Calculation for altitude using temperature and pressure values
float calculate_altitude(float temp, float pressure)  //; - Extra semicolon
{
    float altitude;
 
    altitude1 = 1013.25/(pressure);
    altitude2 = pow(altitude1,0.190222560);
    altitude3 = altitude2-1;
    altitude = (altitude3*(temp +273.15))/0.0065;
    return altitude;
}

// }这里有特制的紧支撑

代码语言:javascript
复制
void loop() {

    //Obtaining temperature and pressure events off BMP280
    sensors_event_t temp_event, pres_event;
    bmp_temp->getEvent(&temp_event);
    bmp_pressure->getEvent(&pres_event);

    //Taking temperature and pressure values from the events
    temp = temp_event.temperature;
    pressure = pres_event.pressure;

    altitude = calculate_altitude(temp, pressure);

    //Reading acceleration values in X, Y and Z axis directions from accelerometer
    x = analogRead(A1);
    y = analogRead(A2);
    z = analogRead(A3);
    Serial.print(" temperature = ");
    Serial.print(temp); //Print temperature value
    Serial.print(",");
    Serial.print(" pressure = ");
    Serial.print(pressure); //Print pressure value
    Serial.print(",");
    Serial.print(" altitude = ");
    Serial.print(altitude); //Read altitude value
    Serial.print(",");
    Serial.print(" x axis acceleration = ");
    Serial.print(x);  //Read acceleration in X direction
    Serial.print(",");
    Serial.print(" y axis acceleration = ");
    Serial.print(y);  //Read acceleration in Y direction
    Serial.print(",");
    Serial.print(" z axis acceleration = ");
    Serial.println(z); //Read acceleration in Z direction
    delay(100);
}

(请注意,我没有Arduino,因此无法为您测试编译此代码。)但我纠正了明显的错误。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71484609

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档