2
#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

谁能解释为什么会发生这个错误?

4

4 回答 4

8

您需要转发声明该pow函数。像 -

....
void pow(int e, int b);

int main()
....

这里几乎没有什么问题。例如按e传递。所以,e在 main 上与pow.

pow(e, b);
cout<<"Power:"<<e;  // This just prints the value taken from console
                    // And not the calculated power.

要么使pow函数返回一个值(或)通过e引用传递。

于 2012-06-13T13:49:36.427 回答
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))是在这个代码文件中定义的,但可以在文件中函数的定义代码之前调用。这是一种更好的方法,因为您的文件中可能有多个函数以不同的顺序相互调用,并且在文件中调用它们之前重新排列它们的定义可能并不容易。这是关于前向声明的好读物

您可能还希望通过引用您的函数来传递参数以获得正确的结果。即使用void pow(int& e, int& b). 这将导致pow()函数中修改的值实际应用于整数eb而不仅仅是它们的副本,这些副本将在执行完成后被丢弃pow()。这个关于在函数中通过引用传递参数的链接很好地解释了这一点。

于 2012-06-13T14:07:04.000 回答
3

#include <cmath>只需在代码开头导入即可轻松解决此问题。

于 2019-12-12T15:36:11.467 回答
1

您需要使用函数pow的前向声明。或者只是将它的定义移到函数上方。

于 2012-06-13T13:50:09.290 回答