#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|error: 'pow' was not declared in this scope
任何人都可以解释为什么会发生此错误吗?
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)
) 在此代码文件中定义,但可以在文件中函数的定义代码之前调用。这是一种更好的方法,因为您的文件中可能有多个函数以不同的顺序相互调用,并且在文件中调用它们之前重新排列它们的定义可能并不容易。这是一篇很好的读物前向声明 http://www.learncpp.com/cpp-tutorial/17-forward-declarations/
您可能还想通过引用函数传递参数以获得正确的结果。即使用void pow(int& e, int& b)
。这将导致您的值被修改pow()
实际应用于整数的函数e
and b
不仅仅是他们的副本,这些副本在之后就会被扔掉pow()
执行完毕。这link http://www.cplusplus.com/doc/tutorial/functions2/关于在函数中通过引用传递参数很好地解释了这一点。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)