C++ c+中的函数声明+;

C++ c+中的函数声明+;,c++,function,raspberry-pi,declaration,C++,Function,Raspberry Pi,Declaration,我写了这段代码,我不知道该怎么做才能改变它。这段代码我想用在我的树莓皮声纳-hcsr04测量距离。请问您知道如何修复我的代码吗?:)在此之前,我编写了一个代码,例如。这是我真正的密码。所以请再次检查:)谢谢 int-zmerat1(){ int-smer=0; printf(“meram sonar1”); 数字写入(1,高); 延迟微秒(20); 数字写入(1,低); 而(数字读取(回声声纳1)=低); long zaciatok=微秒(); 而(数字读取(回声声纳1)=高); 长cas=mi

我写了这段代码,我不知道该怎么做才能改变它。这段代码我想用在我的树莓皮声纳-hcsr04测量距离。请问您知道如何修复我的代码吗?:)在此之前,我编写了一个代码,例如。这是我真正的密码。所以请再次检查:)谢谢

int-zmerat1(){
int-smer=0;
printf(“meram sonar1”);
数字写入(1,高);
延迟微秒(20);
数字写入(1,低);
而(数字读取(回声声纳1)=低);
long zaciatok=微秒();
而(数字读取(回声声纳1)=高);
长cas=micros()-zaciatok;
int vzdialenost=cas/58;
如果(vzdialenost<100){
smer=zmerator28();//100){
zmerat1();
}
返回smer;
}
int-zmerat28(){
int-smer=0;
printf(“梅拉姆声纳2 a 8”);
//------------声纳2---------------------
数字写入(2,高);
延迟微秒(20);
数字写入(2,低);
而(数字读取(回声声纳2)=低);
长startTime2=微秒();
而(数字读取(回声声纳2)=高);
长行程时间2=micros()-startTime2;
整数距离2=旅行时间2/58;
//------------声纳8----------------------
数字写入(8,高);
延迟微秒(20);
数字写入(8,低);
而(数字读取(回声声纳8)=低);
长startTime8=微秒();
而(数字读取(回声声纳8)=高);
长行程8=micros()-startTime8;
整数距离8=旅行时间8/58;
//波罗夫纳尼vzdialenosti
如果(距离2>100 | |距离8>100){
如果(距离2>距离8){
smer=2;
}
否则{
smer=8;
}
}
否则{
smer=0;
}
返回smer;
}

在声明函数之前,您正在使用函数
sum
。您可以将函数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;
}
int sum();//已声明正向
整数=0;
int a(){
对于(int i=0;i<20;i++){
如果((i%2)==1){
数字=总和();
}  
}
返回号码;
}
整数和(){
数字=数字+100;
返回号码;
}
关于这个问题的进一步解释,可以在堆栈溢出的其他地方找到,比如这个问题的答案:


注意:我从来没有彻底测试过你的代码,我猜你也没有这样做过,所以正如LogicStuff指出的,它甚至没有编译,我做了一些更改,使代码编译,尽量少的更改,使原始代码仍然可以从中看到。感谢你指出LogicStuff。

我想你的问题是您有一个编译错误。您在尚不可见的位置使用了
sum
。请将sum移到a()上方,或使用
int sum();
a()上方向前声明它

另一个问题是:

if(i % 2 = 1) {
应该是:

if((i % 2) == 1) {
           ^~~~~ !!
哇,我发现了第三个问题:)

您试图在
a()
中声明的
int sum()
内使用变量
number
,但无法执行此操作。您应该通过引用将数字传递给sum(不需要返回值,您可以在number参数中返回):

并称之为:

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

a()

中,代码中存在大量错误,这些错误将导致编译器错误:

如果您正在使用
inta()
中的
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;
}
因此,您完全可以不让
a()
成为函数:

#define a() 1000
或者,(可能更好):

编辑: 对于更新的代码,您需要在
int-zmerasonar1()
启动之前编写
int-zmerasonar28();

int zmeratSonar28();

int zmeratSonar1() {
    //Sonar code stuff
}

int zmeratSonar28() {
    //Other sonar code stuff
}

进行比较时,请使用
=
,因为单个
=
是赋值运算符。它应该是:
如果(i%2==1)
。另外,你可能需要在第二行末尾加一个分号:
int number=0;
@Timco你写了三句话,但没有提供任何有用的信息来说明你的问题是什么。你想实现什么?你应该描述问题是什么。嗨,是的,我知道,对不起。我写得很匆忙……这是我真正的codePo请纠正您的错误。我建议更改
sum
签名(并显示实现),所以它要么只返回新值,要么修改参数。虽然使用OP当前的实现进行两次编译,但这很奇怪,而且可能只有一个
+=
@LogicStuff修复了它,每次我看这段代码时都会发现一些新的东西。嗨,我很快就写了它……如果你想要我真正的代码,请给我写你的e邮件:):)@MarcinJędrzejewski请给我写封电子邮件,我会把我的完整真实代码发给你:)@TimcoVanco你为什么不想把完整真实代码发到SO?你选择了懒惰的全局变量方式:)@LogicStuff不是最漂亮的解决方案,但我真的希望函数签名与OP的一样:)嗨,我写得很匆忙。。。如果你想要我的真实代码,请给我写你的电子邮件:):@TommyA请检查我上面的代码,我已经编辑过了,现在它是我的真实代码:)
int a() {
    return 1000;
} 
#define a() 1000
const int a = 1000;
int zmeratSonar28();

int zmeratSonar1() {
    //Sonar code stuff
}

int zmeratSonar28() {
    //Other sonar code stuff
}