找回密码
 注册
搜索
热搜: 回贴
  • 前程无忧官网首页 有什么好的平台可以
  • 最新的销售平台 互联网营销的平台有哪
  • 制作网页的基本流程 网页制作和网页设
  • 【帝国CMS】输出带序号的列表(数字排
  • 网站建设公司 三一,中联,极东泵车的
  • 织梦 建站 织梦网站模版后台怎么更改
  • 云服务官网 哪些网站有免费的简历模板
  • 如何建网站要什么条件 建网站要用什么
  • 吉林市移动公司电话 吉林省退休人员网
  • 设计类毕业论文 网站设计与实现毕业论
查看: 1989|回复: 9

一个令我头疼的问题

[复制链接]
发表于 2009-11-3 03:39:54 | 显示全部楼层 |阅读模式 IP:江苏扬州
同一个程序在两台机器上面一个OK,另外一个却有错误,曾经问过,aogun说是有台没打补丁 但是我确定两台都没打过SP6,现在在家里电脑上面运行还是出错谁能帮我解决下,错误如下
error C2248: 'inside' : cannot access private member declared in class 'String'
error C2248: 'inside' : cannot access private member declared in class 'String'
error C2593: 'operator >>' is ambiguous
error C2593: 'operator <<' is ambiguous
error C2593: 'operator <<' is ambiguous
源代码在附件里
注意 这个在有的机器上运行是没错误的








附件: 只有本站会员才能下载或查看附件,请您 登录 或 注册
发表于 2009-11-3 03:39:55 | 显示全部楼层 IP:江苏扬州
你把这两个重载的函数定义写到类里面去~!
friend istream& operator >>(istream& cin,String& o1)//输出输入流重载,注意格式
{
cin>>o1.inside;
return cin;
}
friend ostream& operator <<(ostream& cout,String& o2)
{
cout<<o2.inside;
return cout;
}
回复

使用道具 举报

发表于 2009-11-3 03:39:59 | 显示全部楼层 IP:江苏扬州
我看了下,你的find的算法有点问题,改一下:
int String::find(String & s2)//find的实现
{
for(int i=0;i<length();i++)
{
for(int j=i,k=0;k<s2.length()&&inside[j]==s2.inside[k];j++,k++) ;
if(k==s2.length()-1)
return i;
}
return -1;
}
回复

使用道具 举报

发表于 2009-11-3 03:40:00 | 显示全部楼层 IP:江苏扬州
具体原因我也不清楚,反正老是在重载流运算符的时候老是说:有歧义~!!!
所以建议,以后只要是重载这个函数,就把它写在类里吧(作为友元的时候)。
回复

使用道具 举报

发表于 2009-11-3 03:40:02 | 显示全部楼层 IP:江苏扬州
以下是引用wfpb在2006-7-10 20:32:15的发言:
我看了下,你的find的算法有点问题,改一下:
int String::find(String & s2)//find的实现
{
for(int i=0;i<length();i++)
{
for(int j=i,k=0;k<s2.length()&&inside[j]==s2.inside[k];j++,k++) ;
if(k==s2.length()-1)
return i;
}
return -1;
}

这里是不可以减去1的,减了以后就错了
因为最后一个相同的以后 还要进行K++刚好可以和S2的长度相等
我重新装了几次VC并且改了点路径以后已经解决了我的问题 呵呵 谢谢wfpd
回复

使用道具 举报

发表于 2009-11-3 03:40:03 | 显示全部楼层 IP:江苏扬州
你可以自己去想想,你那绝对有问题,最好做做实验
回复

使用道具 举报

发表于 2009-11-3 03:40:04 | 显示全部楼层 IP:江苏扬州
循环里的k<s2.length()和k==s2.length()你不觉得矛盾吗?
如果k==s2.length()则循环语句被判断不成立,又怎么进去执行里面判断块呢?
回复

使用道具 举报

发表于 2009-11-3 03:40:05 | 显示全部楼层 IP:江苏扬州
呵呵 注意 k<s2.length()和k==s2.length()不在同一个循环

for(int j=i,k=0;k<s2.length()&&inside[j]==s2.inside[k];j++,k++) ;//这里已经结束了这个循环了
回复

使用道具 举报

发表于 2009-11-3 03:40:07 | 显示全部楼层 IP:江苏扬州
哦,没看见~!
回复

使用道具 举报

发表于 2009-11-3 03:40:08 | 显示全部楼层 IP:江苏扬州
呵呵~~~
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|小黑屋|最新主题|手机版|微赢网络技术论坛 ( 苏ICP备08020429号 )

GMT+8, 2024-9-30 15:24 , Processed in 0.124677 second(s), 12 queries , Gzip On, MemCache On.

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表