未在范围错误中声明变量/函数参数太少

时间:2018-07-02 19:02:00

标签: c++ function codeblocks

我正在编写一个简单的代码,以根据用户输入获取数字和幂,并使用函数将该数字平方为该幂。但是,在尝试编译代码时,出现多个错误。这是代码:

#include <iostream>
using namespace std;

double power(double& n1, sq)
{
    for (int i = 0; i < sq; i++) {
        n1* n1;
    }
    return n1;
}

int main()
{
    double power(double&);
    double num1, square;
    cout << "Enter a number IMMEDIATLY: ";
    cin >> num1;
    cout << "\nEnter a power: ";
    cin >> square;
    power();
    cout << num1 << endl;
    return 0;
}

这是我收到的错误:

||=== Build: Debug in practice (compiler: GNU GCC Compiler) ===|
|5|error: 'sq' has not been declared|
In function 'double power(double&, int)':|
|6|error: 'sq' was not declared in this scope|
|7|warning: statement has no effect [-Wunused-value]|
In function 'int main()':|
|22|error: too few arguments to function 'double power(double&)'|
|15|note: declared here|
|17|warning: unused variable 'ans' [-Wunused-variable]|
||=== Build failed: 3 error(s), 2 warning(s) (0 minute(s), 0 second(s)) ===|

对于解决这些错误的任何帮助或帮助,将不胜感激,因为我已经困扰了一段时间。谢谢!

edit:所以我已经将square解析为一个int并将变量初始化为power()(正如你们所说的),但是现在代码在输出中产生了错误的答案(任何大于平方的数字都会产生不正确的输出) )。

#include <iostream>

using namespace std;

double power(double& n1, int& sq) {
for (int i=2; i<=sq; i++) {
        n1*=n1;
}
return n1;

}

int main()
{
double power(double& n1, int& sq);
double num1;
int square;
cout << "Enter a number IMMEDIATLY: ";
cin >> num1;
cout << "\nEnter a power: ";
cin >> square;
 power(num1, square);
cout << num1 << endl;
return 0;
}

1 个答案:

答案 0 :(得分:1)

要回答第二个问题,只需使用示例跟踪代码即可:

让我们说输入是

n1 = 3
sq = 3

我们知道3^3 = 27,所以让我们看看是否能得到答案。

首先,操作n1 *= n1将n1与其自身相乘。仅对于平方,这很好:3*3 = 9。但是然后您再次遍历它,并且n1现在为9,因此代码将计算9*9 = 81

看看是否可以从这里弄清楚。提示:您将需要另一个变量进行存储。

此外,您的return语句不在power()函数的括号内。尽管它是独立工作的,因为您通过了&n1作为参考。完全删除return语句,或在main中创建一个新的变量,以从power()接收值。如果要使用后者,请删除&符号并将return语句放在大括号内。为了更好地理解按引用传递与按值传递,请参阅this link。祝你好运!