在尝试使用“square()”函数编译简单程序时,“'square'未在此范围内声明”错误。
我正在使用Stroustrup的编程:使用C ++的原理和实践进行“尝试此”练习(“功能”部分),代码将无法编译。
以下是代码:
#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
#include <cmath>
using namespace std;
int main()
{
for(int i=0; i<100; i++){
cout<<i<<'\t'<<square(i)<<'\n';
}
}
这就是我的编译返回的内容:
function.cpp: In function ‘int main()’:
function.cpp:10:26: error: ‘square’ was not declared in this scope
cout<<i<<'\t'<<square(i)<<'\n';
我做了另一次尝试并在for循环中放置了一个函数声明:
#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
#include <cmath>
using namespace std;
int main()
{
for(int i=0; i<100; i++){
int square(i);
cout<<i<<'\t'<<square(i)<<'\n';
}
}
回复是:
function.cpp: In function ‘int main()’:
function.cpp:11:26: error: ‘square’ cannot be used as a function
cout<<i<<'\t'<<square(i)<<'\n';
此外,我将“square()”函数声明放在“main”主体内部以及“main”主体之前:回复与我对#2的响应相同。
编译器和操作系统是:
gcc version 5.2.1 20151028 (Ubuntu 5.2.1-23ubuntu1~15.10)
我是一个新手,很可能错误在于一些非常简单的事情 - 但我认为我已经尝试过所有可能的选择。至于“std_lib_facilities.h”文件,它不起作用并给出“不赞成的标题”回复。
我会非常感谢任何帮助和建议。
答案 0 :(得分:3)
编译器是对的:C和C ++都没有在标准库中提供名为TessBaseAPI.PageIteratorLevel.RIL_TEXTLINE
的函数。此外,square
不是函数声明。它会创建一个名为int square(i);
的{{1}}变量,其初始值为int
。
应该做什么代码?
答案 1 :(得分:3)
您必须声明并使用以下函数:
#include <iostream>
int square(int x) { // function declared and implemented
return x*x;
}
int main(void) {
for(int i=0; i<100; ++i) {
std::cout<<i<<'\t'<<square(i)<<'\n';
}
return 0;
}
或者:
#include <iostream>
int square(int x); // function prototype
int main(void) {
for(int i=0; i<100; ++i) {
std::cout<<i<<'\t'<<square(i)<<'\n';
}
return 0;
}
int square(int x) { // function definition/implementation
return x*x;
}
但对于像这样的简单代码,它不值得创建函数 - 相反,您只需在for循环内执行i*i
即可实现相同的结果而无需调用函数。或者,您可以使用pow(x,n)
中的<cmath>
,但此处并不一定非必要。
另请注意我的示例中的++i
循环中的for
,但这里并不重要,但从开始学习i++
是件好事。创建变量i
的副本然后递增它 - 而执行++i
不会复制。当i
只是一个整数(例如)时,这是无关紧要的,但是当它可能是一个不同的实体(例如复制可能更昂贵的对象)时,它变得更加重要。
此外,最好不要放置using namespace std;
,因为这会造成名称空间污染 - 有关详细信息,请参阅此处:
答案 2 :(得分:1)
在cmath中没有square()这样的函数。你需要pow(base,exp)。以下代码应该编译。
#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
#include <cmath>
using namespace std;
int main()
{
for(int i=0; i<100; i++){
cout<<i<<'\t'<<pow(i, 2)<<'\n';
}
}