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::
.尽管如此,很多标准库实现都是放宽的,并且还将名称放入全局命名空间.
它依赖于实现,哪些标头包含在哪个标头中,因此您应该始终确保包含所需的所有标头,而不是假设它们将自动包含在内.
我在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)
归档时间: |
|
查看次数: |
897 次 |
最近记录: |