簡體   English   中英

編譯簡單的C ++程序時遇到問題

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM