标题:运算符重载困惑
只看楼主
kittel
Rank: 2
来 自:武汉
等 级:论坛游民
威 望:1
帖 子:38
专家分:73
注 册:2010-11-19
结帖率:100%
已结贴  问题点数:20 回复次数:23 
运算符重载困惑
我照着书上写了个类,其中用到了输出流重载,跟书上写的一样,但运行起来就是有错误,不知道是我的程序写的有问题还是因为VC和borlandC的差异导致的。我用的是VC,书上用的是borlandC++。运行时提示,<<符是ambiguous模拟两可的。
#include<iostream>
using namespace std;
    class Date {
    public:
        int year,month,day;
    public:
        int yearo() {return year;}
        int montho() {return month;}
        int dayo() {return day;}
        void set(int,int,int);
        void add();
        bool isrun();
       friend ostream& operator<<(ostream&,const Date&);
    };
    void Date::set(int y,int m,int d) {
        year=y;month=m;day=d;}
      ostream& operator<< (ostream& out,const Date& da) {
        return out<<da.year<<"-"<<da.month<<"-"<<"-"<<da.day<<endl;}
    bool Date::isrun() {
        if(year%4==0 && year%100!=0 || year%400==0) return true;
        return false;}

    int main() {
        Date daa;
        int y,m,d;
        cout<<"please input the date "<<endl;
        cin>>y>>m>>d;
        daa.set(y,m,d);
        cout<<daa;
        return 0;
    }
搜索更多相关主题的帖子: 运算符 困惑 重载 
2010-11-30 10:29
zhoufeng1988
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:北京
等 级:贵宾
威 望:27
帖 子:1432
专家分:6329
注 册:2009-5-31
得分:0 
我使用g++编译器,运行没有问题。
2010-11-30 11:01
xanxus
Rank: 2
等 级:论坛游民
威 望:1
帖 子:21
专家分:60
注 册:2010-10-26
得分:0 
删掉 cout<<daa;
这句话C++识别不了。

授人以鱼  不如授人以渔
2010-11-30 11:08
kittel
Rank: 2
来 自:武汉
等 级:论坛游民
威 望:1
帖 子:38
专家分:73
注 册:2010-11-19
得分:0 
回复 3楼 xanxus
删去就失去我本来的意义了,我本来就是想用重载的输出流操作。
2010-11-30 12:46
laoyang103
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:内蒙古包头
等 级:贵宾
威 望:19
帖 子:3082
专家分:11056
注 册:2010-5-22
得分:5 
程序代码:
#include<iostream>
using namespace std;
    class Date {
    public:
        int year,month,day;
    public:
        /*int yearo() {return year;}
        int montho() {return month;}
        int dayo() {return day;}*/
        void set(int,int,int);
        void add();
        bool isrun();
        ostream& operator<<(ostream& out);
    };
    void Date::set(int y,int m,int d)
    {
        year=y;month=m;day=d;
    }
    ostream& Date::operator<<(ostream& out)
      {
          out<<year<<"-"<<month<<"-"<<"-"<<day<<endl;
          return out;
      }
    bool Date::isrun()
    {
        if(year%4==0 && year%100!=0 || year%400==0)
            return true;
        return false;
    }

    int main() {
        Date daa;
        int y,m,d;
        cout<<"please input the date "<<endl;
        cin>>y>>m>>d;
        daa.set(y,m,d);
        daa<<cout;
        return 0;
    } 
无能为力   我也 找不出那个怎么就二义性了   帮你写成了重载为类的成员函数  
可以运行   抱歉恕我无能

                                         
===========深入<----------------->浅出============
2010-11-30 15:35
pangding
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:北京
等 级:贵宾
威 望:94
帖 子:6784
专家分:16751
注 册:2008-12-20
得分:0 
我编译也没问题語法错误(只有一个警告)。它报哪行的 << 有歧义?
2010-11-30 18:02
kittel
Rank: 2
来 自:武汉
等 级:论坛游民
威 望:1
帖 子:38
专家分:73
注 册:2010-11-19
得分:0 
回复 6楼 pangding
最后main中的输出符号<<模拟不可。你用的是VC吗?
2010-11-30 20:08
kittel
Rank: 2
来 自:武汉
等 级:论坛游民
威 望:1
帖 子:38
专家分:73
注 册:2010-11-19
得分:0 
回复 6楼 pangding
还有就是为什么在VC中类的私有数据成员不能访问,但书上可以?
2010-11-30 20:15
平常心飞儿
Rank: 2
来 自:内蒙古科技大学
等 级:论坛游民
帖 子:14
专家分:23
注 册:2010-6-3
得分:0 
应该是你的开发工具的问题   我试了  没有错误 你把提错的地方标出来
2010-11-30 22:01
pangding
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:北京
等 级:贵宾
威 望:94
帖 子:6784
专家分:16751
注 册:2008-12-20
得分:0 
回复 8楼 kittel
我用的 g++,不过还真不是很清楚你这个为什么会歧义。那个错误的完整描述是什么?它有没有说是怎么个歧义法?有时错误会显示好几行,跟着的几个都在指示一个错误。

另外,本来私有成员外界就不能访问。你的书上是怎么说的?你给个示例程序我们来分析一下。
2010-11-30 22:27



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-327369-1-1.html




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

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