#include <iostream>
#include <string.h>
using namespace std;
int main()
{
int e=0;
int b=0;
cout<<"Enter Exponent";
cin>>e;
cout<<"Enter Base";
cin>>b;
pow(e, b);
cout<<"Power:"<<e;
return 0;
}
void pow(int e, int b)
{
int t=1;
while(b==t)
{
e=e*b;
t++;
}
}
ulaga.cpp | 29 |错误:'pow'未在此范围内声明
任何人都能解释为什么会出现这个错误吗?
答案 0 :(得分:8)
您需要转发声明pow
功能。喜欢 -
....
void pow(int e, int b);
int main()
....
这里有一些问题。例如,e
按值传递。因此,main中的e
与pow
的{{1}}不同。
pow(e, b);
cout<<"Power:"<<e; // This just prints the value taken from console
// And not the calculated power.
使pow
函数返回值(或)通过引用传递e
。
答案 1 :(得分:8)
C ++编译器按顺序依次解析您的代码文件。即第1行然后是第2行,然后第3行......依此类推。所以当编译器进入 pow(e, b);
函数中的函数调用语句 main()
时,它尚未达到定义在 void pow(int e, int b)
函数下方运行 main()
,因此会出错。有两种方法可以解决这个问题。
1)将 void pow(int e, int b)
的定义(以及您计划从main()
调用的任何其他功能)移到 main()
强>功能本身。这样,编译器在 pow(e, b);
中到达 main()
行之前已经解析并了解您的函数。
2)另一种方式是使用前向声明。这意味着在 void pow(int e, int b);
功能之前添加 main()
行。这告诉编译器前向声明给出的函数(在本例中为 void pow(int e, int b)
)是在此代码文件中定义的,但可以在文件中函数的定义代码之前调用。这是一种更好的方法,因为您的文件中可能有多个函数以不同的顺序相互调用,并且在文件中调用它们之前重新排列它们的定义可能并不容易。这是Forward Declaration
您可能还希望通过引用函数传递参数以获得正确的结果。即使用 void pow(int& e, int& b)
。这会导致 pow()
函数中修改的值实际应用于整数e
和b
,而不仅仅是应用于其后将丢弃的副本 pow()
已完成执行。关于在函数中通过引用传递参数的这个link非常适合解释这个。
答案 2 :(得分:1)
您需要使用函数 pow 的前向声明。或者只是将它的定义移到 main 函数之上。
答案 3 :(得分:0)
只需在代码开头导入the_ROM_image:
{ [bootloader] fsbl.elf
design.bit
u-boot.elf
}
,就可以轻松解决此问题。