编译简单的C ++程序时出现问题

时间:2010-02-02 13:46:13

标签: c++ compiler-errors

我提供了这个简单的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结束时添加一个返回0,但这没有帮助。知道我做错了吗?

P.S这可能实际上是一个C片段,但我似乎记得讲师说它是C ++。

干杯

6 个答案:

答案 0 :(得分:6)

您是否在gcc扩展名为.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; } 编译C ++代码?

g++

并使用{{1}}进行编译。

答案 1 :(得分:3)

这是一个我倾向于称为错误消息失明的问题。考虑你的第一个错误:

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

你有意在这些表达式中溢出整数。如果你取一个整数可以容纳的最大数,并添加一个,会发生什么?编译器警告你已经完成了。

答案 2 :(得分:2)

更改

void main ( int argc , char * argv[])

int main ( int argc , char * argv[])

在include之后添加using语句:

using namespace std;

并在主要功能结束时:

return EXIT_SUCCESS;

答案 3 :(得分:1)

更改行

void main ( int argc , char * argv[])

int main (int argc, char *argv[])

答案 4 :(得分:0)

第一个错误是因为C ++标准要求函数main()返回一个整数。改为:

 int main ( int argc , char * argv[])

其余部分是因为命名的对象位于std命名空间中。添加#includes的使用指令:

#include <limits.h>
#include <iostream>
using namespace std;

当您说出以下内容时,警告就会被删除:

INT_MAX + 1

您正在尝试创建一个大于最大可能整数的值。这可能会也可能不会做你想要的。

答案 5 :(得分:0)

正如Mehrdad所指出的那样,你正在编译从扩展名为.c的文件中编译c ++代码。

此外,您还需要一个“using namespace std;”如果您不打算为cout明确指定它,请在#include之后。