'pow' 未在此范围内声明

2024-01-10

#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(使用前将#替换为@)

'pow' 未在此范围内声明 的相关文章

随机推荐