我遇到了一个很大的问题,可能是一个新手问题。我的问题是我得到的错误是该方法未在此范围内创建,但事实确实如此。
int main() { //beggining main
int n;
int m;
int result =0;
cout << "Dime m en (m sobre n)" << endl;
cin >> m;
cout << "Dime n:" << endl;
cin >> n;
result = calculate(m,n);
cout << result << endl;
return 0;
} //finish main
int calculate(int m, int n){ //begin calculate
return m+n;
} //finish calculate
当我构建项目时,我在结果= calculate(m,n)中未在此范围内声明'calculate';线;
这可能是一件愚蠢的事,但为什么我会收到此错误?非常感谢
答案 0 :(得分:1)
按照以下方式向前宣布您的calculate
功能:
int calculate(int m, int n);
int main() { //beginning main
int n;
int m;
int result =0;
cout << "Dime m en (m sobre n)" << endl;
cin >> m;
cout << "Dime n:" << endl;
cin >> n;
result = calculate(m,n);
cout << result << endl;
return 0;
} //finish main
int calculate(int m, int n){ //begin calculate
return m+n;
}
你必须这样做的原因是因为在C和C ++中,编译器在遇到calculate()
调用时并不知道你的函数是否存在。
有两种方法可以避免此行为产生的错误:要么在main
之前定义整个函数及其正文,那么编译器在看到calculate()
时就会知道所有内容。调用,或者您只是使用名为 prototype 的函数声明函数,该函数声明函数的名称,参数类型和返回类型,然后稍后定义函数体。这里的代码采用后一种方法。
答案 1 :(得分:1)
为什么会出现此错误?
编译器只知道已声明的内容。在遇到声明时
result = calculate(m,n);
在你的int main()
函数中,它没有遇到符合用法的calculate
声明(或者在这种情况下的任何声明),因此你的程序有问题。
因此,您必须在之前告诉编译器您的函数calculate()
。这可以通过在calculate()
的前面移动main()
的定义,或者仅仅添加一个声明,告诉编译器这样的函数存在,并在稍后提供它的主体,如
int calculate(int, int); // make this function known to the compiler
int main() {
/* ... */
result = calculate(m,n); // okay: function is known
/* ... */
}
int calculate(int n, int m) // provide full function definition
{
/* ... */
return result;
}
这里,calculate()
的声明可能在另一个文件(一个头文件,比如calculate.h
)中,另一个文件中的calculate()
的完整定义(源文件,比如说) ,calculate.cc
)。在后一种情况下,您必须确保加载程序找到从main()
调用的正确函数,即您必须将目标文件链接在一起。
答案 2 :(得分:1)
编译器只能解析在给定点熟悉的名称。需要解决对calculate()
的调用的问题是在代码中提及它之前,因此编译器此时并不熟悉它。
要解决此问题,您需要在之前(代码中)声明calculate()
您调用它的函数,这是您的main()
函数。
通过以下任一方式完成此任务:
移动calculate()
的整个定义,使其高于您的main()
- 可以位于相同的.cpp文件或包含的头文件中。
或者,只需在calculate()
之上的某处声明main()
- 可以在同一个.cpp文件或包含的头文件中 - 并将定义保留在现在的位置。< / p>