' POW'在这方面没有申明

时间:2012-06-13 13:45:02

标签: c++

#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'未在此范围内声明

任何人都能解释为什么会出现这个错误吗?

4 个答案:

答案 0 :(得分:8)

您需要转发声明pow功能。喜欢 -

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

int main()
....

这里有一些问题。例如,e 按值传递。因此,main中的epow的{​​{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() 函数中修改的值实际应用于整数eb,而不仅仅是应用于其后将丢弃的副本 pow() 已完成执行。关于在函数中通过引用传递参数的这个link非常适合解释这个。

答案 2 :(得分:1)

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

答案 3 :(得分:0)

只需在代码开头导入the_ROM_image: { [bootloader] fsbl.elf design.bit u-boot.elf } ,就可以轻松解决此问题。