博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C++中关于string类型究竟能不能用cout输出的问题
阅读量:6029 次
发布时间:2019-06-20

本文共 1587 字,大约阅读时间需要 5 分钟。

hot3.png

 

今天在visual studio 学习c++的string类,发现string的不能用c++的cout函数来输出,后来查了下网上的资料发现应该是可以的,最后才发现自己没有进行导入c++的默认的string的头文件,所以它默认的使用cout不可以使用,编译时出现这样一个错误:

error C2679: binary '<<' : no operator defined which takes a right-hand operand of type 'class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >' (or there is 

no acceptable conversion)

答案:首先得说这个问题的答案是肯定的,cout重载了string类型,所以在c++ 中可以直接输出。

先来看CString、string和string.h这几个区别:

CSting:CString是MFC或者ATL中的实现,是MFC里面封装的一个关于字符串处理的功能很强大的类,只有支持MFC的工程才可以使用。如在linux上的工程就不能用CString了,只能用标准C++中的string类了。在MFC中使用不需要自己加,但在另外的程序中需要加入#include<CString>。

string:string类既是一个标准c++的类库,同时也是STL(Standard Template Library,标准模版库)中的类库,已经纳入C++标准之中。它和CString有本质的区别。

string.h:C语言里面关于字符数组的函数定义的头文件,常用函数有strlen、strcmp、strcpy等等,这个头文件跟C++的半点关系也没有,所以 <string>并非 <string.h>的“升级版本”,他们是毫无关系的两个头文件。

综上,cout函数重载的是string类库中的string类型,而不是CString或string.h中的。

例:

1 #include
2 #include
3 //#include
4 5 using std::cout; 6 using std::string ; 7 using std::endl; 8 9 main()10 {11 string a;13 a="*******";15 cout<
<

 

当编译这个程序时,会出现这样的如上的error,而如果把上面的头文件改为#include<string>时,error就会消失。

而在MFC中或你包含的是CString头文件,如果想用cout输出string 类型,则需要先把string类型转换char*型,如上面例子:

1 #include
2 #include
3 4 using std::cout; 5 using std::string ; 6 using std::endl; 7 8 main() 9 {10 string a;11 a="*******";12 char* b=(char*)a.c_str(); //将string类型转为char*13 cout<
<

总结:参考了网上的一些资料以后,其实就是使用对 你想用的函数方法、类的时候,需要对号入座,觉得这样避免一些比较低级的问题。

转载于:https://my.oschina.net/u/3318187/blog/1941166

你可能感兴趣的文章
特征工程
查看>>
第四次冲刺
查看>>
【枚举】bzoj1800 [Ahoi2009]fly 飞行棋
查看>>
用JS写CSS
查看>>
TOJ4537: n阶行列式
查看>>
PBM文件格式
查看>>
算法刷题笔记-stack-四则运算
查看>>
3.16
查看>>
Linux下arp用法
查看>>
表单文件上传与文件下载
查看>>
jquery 中prop()的使用方法
查看>>
下午考
查看>>
WKWebView
查看>>
创建字符设备的三种方法
查看>>
走在网页游戏开发的路上(六)
查看>>
nginx 配置的server_name参数(转)
查看>>
Uva592 Island of Logic
查看>>
C++基础代码--20余种数据结构和算法的实现
查看>>
footer固定在页面底部的实现方法总结
查看>>
nginx上传文件大小
查看>>