C++ 中的函数声明
Declaration of function in c++
我写了这段代码,我不知道该怎么做才能改变它。我想在我的树莓派中使用这个代码与声纳 - 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
}
- C++:为什么允许在另一个函数中声明函数,而不允许在函数定义中声明?
- 在c++中在类外声明函数有什么好处
- 使用 #define 声明函数
- 在静态库中声明函数,在使用该相同库的应用程序中定义它
- 如何强制编译器在 C/C++ 本身中声明函数?
- 如果您只需要在 .h 文件中声明函数.cpp是否需要在 .h 文件中声明函数?
- C++:<sys/sysctl.h> 无法声明函数CTL_HW和HW_NCPU
- 尝试声明函数的局部变量,但得到范围错误
- 如何在C++模板中声明函数
- 如何在另一个文件的类中声明函数
- 使用非类型模板参数正向声明函数模板
- 在此范围错误中未声明函数错误
- 当我们不能声明函数内联(GCC 编译器)时?
- 未在此作用域中声明函数,即使存在头文件也是如此
- 无法声明函数中的模板类型别名
- 单个CPP文件中多次声明函数声明可以吗?
- 编译一个支持VBA中声明函数的dll
- 使用从外部参数包中获取的参数类型声明函数
- 使用类成员正确地声明函数
- 在函数内重新声明函数