| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1066 人关注过本帖
标题:cstring 编译出错
只看楼主 加入收藏
happynight
Rank: 8Rank: 8
等 级:贵宾
威 望:15
帖 子:807
专家分:760
注 册:2008-4-26
结帖率:87.93%
收藏
已结贴  问题点数:20 回复次数:6 
cstring 编译出错
代码
#include <iostream>
#include <cstring>
//#include <string>
using namespace std;
string s;
int main()
{
  string s2;
  cout<<s<<endl;    //Err
  cout<<s2<<endl;  
  return 0;
}

编译的时候到Err处就会有提示
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::a
llocator<char> >' (or there is no acceptable conversion)
但使用
#include <string>
时就能顺利通过 不知道原因
搜索更多相关主题的帖子: cstring 编译 
2010-01-09 11:08
bccnbin2009
Rank: 7Rank: 7Rank: 7
来 自:浙江
等 级:黑侠
帖 子:86
专家分:602
注 册:2009-10-5
收藏
得分:0 
以前还真是没遇到过呢,不过c++中严格规定:变量未初始化时,是不能被使用的

滨封千里
2010-01-09 23:58
happynight
Rank: 8Rank: 8
等 级:贵宾
威 望:15
帖 子:807
专家分:760
注 册:2008-4-26
收藏
得分:0 
这个即使你初始化也会出错的
2010-01-11 09:00
dssz
Rank: 2
等 级:论坛游民
帖 子:2
专家分:20
注 册:2009-8-25
收藏
得分:0 
#include <string>    //这个头文件

编译也一样有错误

string 没定义流符号cout<<输出

[ 本帖最后由 dssz 于 2010-1-11 11:53 编辑 ]
2010-01-11 11:41
happynight
Rank: 8Rank: 8
等 级:贵宾
威 望:15
帖 子:807
专家分:760
注 册:2008-4-26
收藏
得分:0 
以下是引用dssz在2010-1-11 11:41:20的发言:

#include     //这个头文件

编译也一样有错误

string 没定义流符号cout<<输出
不是啊 用string就不会出错
2010-01-11 13:47
dssz
Rank: 2
等 级:论坛游民
帖 子:2
专家分:20
注 册:2009-8-25
收藏
得分:20 

#include <cstring>  //这个等效于 #include <string.h> 旧格式的string 没定义cout<<
#include <string>    //新格式的头文件,定义了cout<<

其实新格式的string执行cout<<string时,实际是被重载了执行cout<<string.c_str()

换一个说法,
#include <string>
cout<<string;  //这个时候是经过了隐型类型转换,把string类转换成(char *) 类了,然后再执行cout<<


#include <cstring> //这个等效于 #include <string.h>
cout<<string;  //这个时候是不能经过了隐型类型转换把string类转换成(char *) 类了,所以出错了

改为:
#include <iostream>
#include <cstring>
//#include <string>
using namespace std;
string s;
int main()
{
  string s2;
  cout<<s.c_str()<<endl;    //显式地使string类,转换成(char *)类 就正确了
  cout<<s2.c_str()<<endl;  
  return 0;
}




2010-01-11 20:45
happynight
Rank: 8Rank: 8
等 级:贵宾
威 望:15
帖 子:807
专家分:760
注 册:2008-4-26
收藏
得分:0 
以下是引用dssz在2010-1-11 20:45:47的发言:


#include <cstring>  //这个等效于 #include <string.h> 旧格式的string 没定义cout<<
#include <string>    //新格式的头文件,定义了cout<<

其实新格式的string执行cout<<string时,实际是被重载了执行cout<<str ...
十分感谢你的回答 解释的太详细了
不过我在同一台机器上 不同工程中添加相同的代码却能正常运行
真是奇怪
2010-01-12 08:30
快速回复:cstring 编译出错
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.017565 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved