程序不能使用较新版本的g ++进行编译

0 c++

我有以下源代码.这在视觉工作室和g ++ 3.4.6中编译得很好; 但不是用g ++ 4.4.3(在较新的ubuntu机器上).较新的编译器要求我明确包含使用atoi.我只想弄清楚可能导致此行为的原因.是先前包含cstdlib的sstream头文件,不再这样做了.或者是已更改的编译器行为.

#include <sstream>

int main()
{
  char str1[]="123";
  int i = atoi(str1);

  printf ("value = %d",i);
  return 0; 
}
Run Code Online (Sandbox Code Playgroud)

Jam*_*lis 10

您还需要包括<cstdio>printf().

从技术上讲,如果您包含表单的标题<cname>而不是<name.h>,则还需要使用标准库中的名称限定std::.尽管如此,很多标准库实现都是放宽的,并且还将名称放入全局命名空间.

它依赖于实现,哪些标头包含在哪个标头中,因此您应该始终确保包含所需的所有标头,而不是假设它们将自动包含在内.


wkl*_*wkl 6

我在Debian上使用GCC 4.4.5,并且标题已更改,因此您不会引入必要的标头.你需要#include <cstdlib>并且#include <cstdio>得到atoi并且printf,因为编译器抱怨两者都丢失了.

#include <sstream>
#include <cstdio>
#include <cstdlib>


int main()
{
  char str1[]="123";
  int i = std::atoi(str1);

  std::printf ("value = %d",i);
  return 0;
}
Run Code Online (Sandbox Code Playgroud)