我有以下源代码.这在视觉工作室和g ++ 3.4.6中编译得很好; 但不是用g ++ 4.4.3(在较新的ubuntu机器上).较新的编译器要求我明确包含使用atoi.我只想弄清楚可能导致此行为的原因.是先前包含cstdlib的sstream头文件,不再这样做了.或者是已更改的编译器行为.
#includeint main() { char str1[]="123"; int i = atoi(str1); printf ("value = %d",i); return 0; }
James McNell.. 10
您还需要包括
的printf()
.
从技术上讲,如果您包含表单的标题
而不是
,则还需要使用标准库中的名称限定std::
.尽管如此,很多标准库实现都是放宽的,并且还将名称放入全局命名空间.
它依赖于实现,哪些标头包含在哪个标头中,因此您应该始终确保包含所需的所有标头,而不是假设它们将自动包含在内.
您还需要包括
的printf()
.
从技术上讲,如果您包含表单的标题
而不是
,则还需要使用标准库中的名称限定std::
.尽管如此,很多标准库实现都是放宽的,并且还将名称放入全局命名空间.
它依赖于实现,哪些标头包含在哪个标头中,因此您应该始终确保包含所需的所有标头,而不是假设它们将自动包含在内.
我在Debian上使用GCC 4.4.5,并且标题已更改,因此您不会引入必要的标头.你需要#include
并且#include
得到atoi
并且printf
,因为编译器抱怨两者都丢失了.
#include#include #include int main() { char str1[]="123"; int i = std::atoi(str1); std::printf ("value = %d",i); return 0; }