【问题标题】:'pow' Was Not Declared In This Scope'pow' 未在此范围内声明
【发布时间】:2021-03-30 23:06:32
【问题描述】:
#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

谁能解释为什么会出现这个错误?

【问题讨论】:

  • pow()的定义移到main()之上或在main()之前声明函数,以便main()知道pow()是什么。
  • 这个问题怎么算“参数传递错误”?
  • 你的函数 pow 没有返回或输出参数,并且似乎没有副作用,所以任何体面的编译器都应该优化它......也许你想要 e 一个输出参数,然后声明pow(int&amp;e, int b) ...你不应该称它为“pow”,这表明它正在计算一种能力,它没有......

标签: c++ pow


【解决方案1】:

C++ 编译器按顺序依次解析您的代码文件。即第 1 行然后第 2 行然后第 3 行......等等。所以当编译器到达你的main()函数中的函数调用语句pow(e, b);时,它还没有达到函数的定义 void pow(int e, int b)main() 函数下方,因此会给您错误。有两种方法可以解决这个问题。

1) 将 void pow(int e, int b) 的定义(以及您计划从 main() 调用的任何其他函数)移到 main() 函数本身之上。这样,编译器已经解析并在您的函数到达 main() 中的 pow(e, b); 行之前知道您的函数。

2) 另一种方法是使用前向声明。这意味着在 main() 函数之前添加行 void pow(int e, int b);。这告诉编译器前向声明给出的函数(在本例中为 void pow(int e, int b))在此代码文件中定义,但可以在文件中函数的定义代码之前调用。这是一种更好的方法,因为您的文件中可能有多个函数以不同的顺序相互调用,并且在文件中调用它们之前重新排列它们的定义可能并不容易。这是Forward Declaration的好读物

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

【讨论】:

  • @Mahesh - 我记得当我刚接触 C++ 时,我的评论中的链接和这些链接中的示例如何为我澄清了一些事情,而像这篇 OP 帖子这样简单的事情会让我坚持下去。我认为这些可能对 OP 有帮助。 :)
【解决方案2】:

您需要转发声明pow 函数。喜欢-

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

int main()
....

这里很少有问题。例如e按值传递。所以,e in main 和 pow 不同。

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

要么让pow 函数返回一个值,要么通过引用传递e

【讨论】:

    【解决方案3】:

    只需在代码开头导入 #include &lt;cmath&gt; 即可轻松解决此问题。

    【讨论】:

      【解决方案4】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-09-20
        • 2016-08-09
        • 2019-02-17
        • 2021-01-07
        • 2016-10-27
        • 2016-06-03
        相关资源
        最近更新 更多