[英]Problem compiling simple C++ progam
提供了一个简单的C ++ [我认为]程序来调查可以存储的int的最大大小:
#include <limits.h>
#include <iostream>
void main ( int argc , char * argv[])
{
cout << "INT_MAX " << INT_MAX << endl ;
cout << "INT_MAX +1 = " << INT_MAX + 1 << endl ;
cout << "INT_MAX -1 = " << INT_MAX - 1 << endl ;
cout << "INT_MAX / INT_MAX " << INT_MAX /INT_MAX << endl ;
cout << "(INT_MAX +1) / INT_MAX " << (INT_MAX +1) /INT_MAX << endl;
cout << "(INT_MAX -1) / INT_MAX " << (INT_MAX -1) /INT_MAX <<endl;
cout << "INT_MAX / (INT_MAX +1) " << INT_MAX /(INT_MAX+1) <<endl;
cout << "INT_MAX / (INT_MAX -1) " << INT_MAX /(INT_MAX -1) <<endl;
}
我正在尝试使用:
gcc -o int_max int_max.cpp
但是我收到以下错误:
int_max.cpp:4: error: '::main' must return 'int'
int_max.cpp: In function 'int main(int, char**)':
int_max.cpp:8: error: 'cout' was not declared in this scope
int_max.cpp:8: error: 'endl' was not declared in this scope
int_max.cpp:9: warning: integer overflow in expression
int_max.cpp:13: warning: integer overflow in expression
int_max.cpp:15: warning: integer overflow in expression
我尝试在main的末尾添加return 0,但这没有帮助。 知道我做错了什么吗?
PS可能这实际上是C代码段,但我似乎记得讲师说它是C ++。
干杯
您正在使用gcc
在扩展名为.c
的文件中编译C ++代码吗?
// Use new C++ header files instead of their .h version.
#include <climits>
#include <iostream>
// cout and endl are declared in the std namespace.
using namespace std;
int main (int argc, char * argv[])
{
cout << "INT_MAX " << INT_MAX << endl ;
cout << "INT_MAX +1 = " << INT_MAX + 1 << endl ;
cout << "INT_MAX -1 = " << INT_MAX - 1 << endl ;
cout << "INT_MAX / INT_MAX " << INT_MAX /INT_MAX << endl ;
cout << "(INT_MAX +1) / INT_MAX " << (INT_MAX +1) /INT_MAX << endl;
cout << "(INT_MAX -1) / INT_MAX " << (INT_MAX -1) /INT_MAX <<endl;
cout << "INT_MAX / (INT_MAX +1) " << INT_MAX /(INT_MAX+1) <<endl;
cout << "INT_MAX / (INT_MAX -1) " << INT_MAX /(INT_MAX -1) <<endl;
return 0;
}
并使用g++
进行编译。
我倾向于将这个问题称为错误消息失明 。 考虑您的第一个错误:
int_max.cpp:4: error: '::main' must return 'int'
这里的错误是main()必须返回int。 您目前已将main()声明为返回void。
对于此错误消息:
int_max.cpp:8: error: 'cout' was not declared in this scope
int_max.cpp:8: error: 'endl' was not declared in this scope
所有标准库函数和对象都包含在std
名称空间内。 也就是说,您可以:
std::cout << "whatever" << std::endl;
要么:
using namespace std;
...
cout << "whatever" << endl;
最后:
int_max.cpp:9: warning: integer overflow in expression
int_max.cpp:13: warning: integer overflow in expression
int_max.cpp:15: warning: integer overflow in expression
您故意在这些表达式中溢出了整数。 如果您采用一个整数可以容纳的最大数量并加一个整数,会发生什么? 编译器警告您已完成该操作。
更改
void main ( int argc , char * argv[])
至
int main ( int argc , char * argv[])
在includes之后添加using语句:
using namespace std;
在主要功能的末尾:
return EXIT_SUCCESS;
换线
void main ( int argc , char * argv[])
至
int main (int argc, char *argv[])
第一个错误是因为C ++ Standard要求函数main()返回整数。 改成:
int main ( int argc , char * argv[])
剩下的是因为命名的对象在std
名称空间中。 在您的#includes中添加using指令:
#include <limits.h>
#include <iostream>
using namespace std;
之所以说这些警告,是因为您说出类似以下内容:
INT_MAX + 1
您正在尝试创建一个大于最大可能整数的值。 这可能会或可能不会做您想要的。
正如Mehrdad指出的那样,您正在从扩展名为.c的文件中编译c ++代码。
另外,您将需要一个“ using namespace std;”。 在#include之后,如果您不想为cout明确指定它。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.