C++ 中的函数声明

Declaration of function in c++

本文关键字:声明 函数 C++      更新时间:2023-10-16

我写了这段代码,我不知道该怎么做才能改变它。我想在我的树莓派中使用这个代码与声纳 - hc sr 04 来测量距离。请问你知道如何修复我的代码吗?:)在此之前,我写了一个代码作为示例。这是我的真实代码。因此,请再次检查:)谢谢!

int zmeratSonar1() {
int smer = 0;
printf("meram sonar1");
digitalWrite(TRIGsonar1, HIGH);
delayMicroseconds(20);
digitalWrite(TRIGsonar1, LOW);
while (digitalRead(ECHOsonar1)==LOW);
long zaciatok = micros();
while (digitalRead(ECHOsonar1)==HIGH);
long cas = micros() - zaciatok;
int vzdialenost = cas/58;
if(vzdialenost < 100) {
    smer = zmeratSonar28();  // <----here is my problem
}
else if(vzdialenost > 100) {
    zmeratSonar1();
}
return smer;
}
int zmeratSonar28(){
int smer = 0;
printf("meram sonare 2 a 8");
//------------SONAR 2---------------------
digitalWrite(TRIGsonar2, HIGH);
delayMicroseconds(20);
digitalWrite(TRIGsonar2, LOW);
while (digitalRead(ECHOsonar2)==LOW);
long startTime2 = micros();
while (digitalRead(ECHOsonar2)==HIGH);
long travelTime2 = micros() - startTime2;
int distance2 = travelTime2/58;
//------------SONAR 8----------------------
digitalWrite(TRIGsonar8, HIGH);
delayMicroseconds(20);
digitalWrite(TRIGsonar8, LOW);
while (digitalRead(ECHOsonar8)==LOW);
long startTime8 = micros();
while (digitalRead(ECHOsonar8)==HIGH);
long travelTime8 = micros() - startTime8;
int distance8 = travelTime8/58;
//porovnanie vzdialenosti
if(distance2 > 100 || distance8 > 100) {
    if(distance2 > distance8) {
        smer = 2;
    }
    else {
        smer = 8;
    }
}
else{
    smer = 0;
}
return smer;
}

在声明函数之前sum使用该函数。您可以将函数总和移到使用上方,也可以转发声明它:

int sum();  // Forward declared
int number = 0;
int a() {
 for(int i = 0; i < 20; i++) {
  if((i % 2) == 1) {
   number = sum();
  }  
 }
 return number;
}
int sum() {
 number = number + 100;
 return number;
}

关于这个问题的进一步解释,可以在 Stack Overflow 的其他地方找到,比如这个问题的答案:为什么函数在使用之前需要声明?

注意:我从来没有彻底测试过你的代码,我想你也从来没有做过,所以正如 LogicStuff 指出它甚至没有编译,我做了一些更改来编译代码,尽可能少的更改,以便原始代码仍然应该从中可见。感谢您指出LogicStuff。

我想你的问题是你有一个编译错误。您可以在尚不可见的地方使用sum。要么将总和移到 a(( 上方,要么用 a() 上方的 int sum(); 向前声明。

另一个问题是:

if(i % 2 = 1) {

应该是:

if((i % 2) == 1) {
           ^~~~~ !!

呜,我发现了第三个问题:)

您尝试在a()内部声明int sum()内部使用变量number,您根本无法做到这一点。你应该通过引用将数字传递给总和(不需要返回值,你在数字参数中返回(:

void sum(int& number) {

并称之为:

sum(number);  // this is in place of `number = sum();`

a()

代码中有许多错误会导致编译器错误:

如果您在 int a() 中使用 sum() 函数,则需要向前声明它。

int sum();
int add() {
    //
}
int sum() {
    //
}

然而,sum()真正做的只是将 100 加到变量中。这可以通过 += 运算符非常轻松地合并到 add() 函数中,这意味着您的代码等效于以下内容:

int a() {
    int number = 0;        //Added a necessary ';'
    for(int i = 0; i < 20; i++) { 
        if(i % 2 == 1) {   //Corrected this from if(i % 2 = 1)
            number += 100; //No need for the sum() function
        }  
    }
    return number;
}

关键方面:

您可以在设置上执行许多其他优化;从本质上讲,int a()可以简化为

int a() {
    return 1000;
} 

因此,您

可以轻松地根本不a()函数:
#define a() 1000

或者,(可能更好(:

const int a = 1000;

编辑:对于更新的代码,您需要在int zmeratSonar1()开始之前编写int zmeratSonar28();

int zmeratSonar28();
int zmeratSonar1() {
    //Sonar code stuff
}
int zmeratSonar28() {
    //Other sonar code stuff
}