| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1029 人关注过本帖
标题:输入操作符重载问题 operator>> is ambiguous
只看楼主 加入收藏
zhongjiezhe
Rank: 2
等 级:论坛游民
帖 子:13
专家分:12
注 册:2011-5-20
结帖率:66.67%
收藏
已结贴  问题点数:5 回复次数:8 
输入操作符重载问题 operator>> is ambiguous
#include<iostream>
#include<stdlib.h>
using namespace std;

class SmallInt
{
public:
    SmallInt(int i=0):value(rangecheck(i))
    {}
    int operator=(int i)
    {
        return (value=rangecheck(i));
    }
    operator int()
    {
        return value;
    }
    friend istream& operator>>(istream &is,SmallInt &s);
    friend ostream& operator<<(ostream &os,const SmallInt &s)
    {
        return os<<s.value;
    }
private:
    int rangecheck(int);
    int value;

};

istream& operator>>(istream &is,SmallInt &s)
{
    int ix;
    is>>ix;
    s=ix;
    return is;
}

int SmallInt::rangecheck(int i)
{
    if(i&~0377)
    {
        cerr<<"\n***SmallInt range error: "
            <<i<<" ***"<<endl;
        exit(-1);
    }
    return i;
}

int main()
{
    SmallInt s1,s2;
    cout<<"enter a SmallInt , please:  ";
    while(1)
    {
        cin>>s1;
        cout<<"the value read is "
            <<s1<<"\nit is ";
        cout<<((s1>127) ? "greater than" :((s1<127) ? "less than" : "equal to"))<<"127\n";
        cout<<"\nenter a SmallInt ,please \
                (ctrl-d to exit): ";

    }
    cout<<"bye now\n";
    system("pause");
    return 0;
}
这是c++ primer3 上的一个例子,编译以后出现'operator >>' is ambiguous 的错误提示
但将头文件换成#include<iostream.h>就可以编译通过而且可以正常运行,这是怎么回事啊
搜索更多相关主题的帖子: private include public return friend 
2011-07-06 19:36
玩出来的代码
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:河南新乡
等 级:贵宾
威 望:11
帖 子:742
专家分:2989
注 册:2009-10-12
收藏
得分:0 
没问题,LZ用的什么编译器。

离恨恰如春草,更行更远还生。
2011-07-06 21:10
zhongjiezhe
Rank: 2
等 级:论坛游民
帖 子:13
专家分:12
注 册:2011-5-20
收藏
得分:0 
回复 2楼 玩出来的代码
vc6下得用#include<iostream.h>才能正确运行,不能用#include<iostream> using namespace std;总提示operator>>出错,应该是重载发生二义性吧,搞不清楚是怎么回事
2011-07-06 21:21
玩出来的代码
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:河南新乡
等 级:贵宾
威 望:11
帖 子:742
专家分:2989
注 册:2009-10-12
收藏
得分:1 
那就换编译器吧,VC6对友元的支持不好。那是编译器的问题

离恨恰如春草,更行更远还生。
2011-07-06 22:02
ToBeStronger
Rank: 4
等 级:业余侠客
帖 子:61
专家分:239
注 册:2011-4-8
收藏
得分:1 
回复 3楼 zhongjiezhe
你的VC6.0没打补丁,鉴定完毕.......
2011-07-06 23:10
zhongjiezhe
Rank: 2
等 级:论坛游民
帖 子:13
专家分:12
注 册:2011-5-20
收藏
得分:0 
回复 5楼 ToBeStronger
求补丁名称
2011-07-07 09:45
ToBeStronger
Rank: 4
等 级:业余侠客
帖 子:61
专家分:239
注 册:2011-4-8
收藏
得分:1 
回复 6楼 zhongjiezhe
vc6.0 sp6补丁,官方最后一补丁
2011-07-07 12:17
succubus
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:4
帖 子:635
专家分:1080
注 册:2007-10-7
收藏
得分:1 
学C++就别用VC6了
VC6出来的时候C++标准还没定好呢
还是用VS2005之类的吧

[url=http:///view/aDU1]/image/aDU1.gif" border="0" />[/url]
2011-07-08 09:40
pangding
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:北京
等 级:贵宾
威 望:94
帖 子:6784
专家分:16751
注 册:2008-12-20
收藏
得分:1 
定好了当年MS也没按着标准实现。
2011-07-08 12:19
快速回复:输入操作符重载问题 operator>> is ambiguous
数据加载中...
 
   



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

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