在上一篇文章中,我们已经可以在UNIX下编译一个hello world 程序了。今天介绍UNIX系统下,如何在程序中使用IO库。
主体流程分为以下三步:(代码参考的是:<<C++ Primer>>)
第一步:新建文件,并命名为“Progr1.cpp”
第二步:在Progr1.cpp中写好main函数,并使用cin ,cout 这两个IO库函数。代码如下
#include <iostream>//告诉编译器要使用 iostream 库。尖括号里的名字是一个。头文件。程序使用库工具时必须包含相关的头文件。 int main() { std::cout<<"enter two numbers:"<< std::endl; int v1,v2; std::cin>>v1>>v2; std::cout<<"The num of"<<v1 <<"and"<<v2<< "is" <<v1 + v2<<std::endl; return 0; }
上途代码中有两点值得注意(cin 和cout 的用法及效果比较简单,这里就不在这里缀叙了)。第一点:#include <iostream> 。其作用已经在注释中说明
另外一点值得注意的是:程序中使用
std::cout 和 std::endl,而不 是 cout 和 endl。前缀 std:: 表明 cout 和 endl 是定义在命名空间 std 中 的。使用命名空间程序员可以避免与库中定义的名字相同而引起无意冲突。
第三步:使用命令编译。
这里碰到了一点跟书上不太一样的问题:
一开始,我输入命令:
llbt$ cc Progr1.cpp
报错如下:
Undefined symbols for architecture x86_64: "std::__1::locale::use_facet(std::__1::locale::id&) const", referenced from: std::__1::basic_ostream<char, std::__1::char_traits<char> >& std::__1::endl<char, std::__1::char_traits<char> >(std::__1::basic_ostream<char, std::__1::char_traits<char> >&) in Progr1-74ce42.o std::__1::basic_ostream<char, std::__1::char_traits<char> >& std::__1::__put_character_sequence<char, std::__1::char_traits<char> >(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, char const*, unsigned long) in Progr1-74ce42.o....
如何解决这种情况?明明是按着教科书一步一步来的,却又报错了。这么难学,还是放弃吧。。。这是初学者容易抱有的心态,其实这种问题,在工作中是经常碰到的。
解决问题的思路很简单,你要相信你不是第一个碰到类似问题的人。所以,我们只需要百度/google即可。
大致分析一下出错的原因可能是:编译器不识别这个IO 库.
于是我们可以搜“unix 下使用 iostream”
很快我们就找到了可以解决问题的答案:我们需要通过命令行 告诉编译器,程序需要使用库stdc++。命令如下:
llbt$ cc -lstdc++ Progr1.cpp
出现这个问题的原因是:标准 iostream 类只能用于标准模式下,且iostream包含在 C++ 标准库 libCstd 中.
好了, IO库的使用介绍完了。
问题分析参考网址:http://docs.oracle.com/cd/E19205-01/821-0389/bkaki/
http://zhidao.baidu.com/link?url=p8T1CBBIpn3FZqZq-ktHkUNJHVFzi-ekOdOigl_COsshUeqCpSiRCsvAO3Zc0uA-4V6oY4QabJxHSYkRxPFF3q