关于C 友元函数重载问题,下面是我写的程序,可在VC6.0显示错误。

[复制链接]
查看11 | 回复1 | 2011-7-7 07:39:31 | 显示全部楼层 |阅读模式
#includeiostream
usingnamespacestd;
classcomplex
{
protected:
doublereal;
doubleimage;
public:
complex(doubler=0,doublei=0):real(r),image(i){}
voidset(doubler,doublei){real=r;image=i;}
doubleGetreal(){returnreal;}
doubleGetimage(){returnimage;}
friendistream(istream
                friendostream(ostream

};
istream(istream\"输入实部:\"endl;
inz.real;
cout\"输入虚部:\"endl;
inz.image;

returnin;
}

ostream(ostreamz.real\"\"z.image\"i\"endl;

returnout;
}

intmain()
{
complext1;
complext2;

        cint1;
cint2;
coutt1;
coutt2;
       
        return0;
}
/*errorC2248:\'real\':cannotaccessprotectedmemberdeclaredinclass\'complex\'
C:\\DocumentsandSettings\\Owner\\MyDocuments\\Text1.cpp(6):seedeclarationof\'real\'
C:\\DocumentsandSettings\\Owner\\MyDocuments\\Text1.cpp(23):errorC2248:\'image\':cannotaccessprotectedmemberdeclaredinclass\'complex\'
C:\\DocumentsandSettings\\Owner\\MyDocuments\\Text1.cpp(7):seedeclarationof\'image\'
C:\\DocumentsandSettings\\Owner\\MyDocuments\\Text1.cpp(31):errorC2248:\'real\':cannotaccessprotectedmemberdeclaredinclass\'complex\'
C:\\DocumentsandSettings\\Owner\\MyDocuments\\Text1.cpp(6):seedeclarationof\'real\'
C:\\DocumentsandSettings\\Owner\\MyDocuments\\Text1.cpp(31):errorC2248:\'image\':cannotaccessprotectedmemberdeclaredinclass\'complex\'
C:\\DocumentsandSettings\\Owner\\MyDocuments\\Text1.cpp(7):seedeclarationof\'image\'
C:\\DocumentsandSettings\\Owner\\MyDocuments\\Text1.cpp(41):errorC2593:\'operator\'isambiguous
C:\\DocumentsandSettings\\Owner\\MyDocuments\\Text1.cpp(42):errorC2593:\'operator\'isambiguous
C:\\DocumentsandSettings\\Owner\\MyDocuments\\Text1.cpp(43):errorC2593:\'operator\'isambiguous
C:\\DocumentsandSettings\\Owner\\MyDocuments\\Text1.cpp(44):errorC2593:\'operator\'isambiguous
Errorexecutingcl.exe.*/
//求高手帮我看看,做很久了,不知道为什么?
回复

使用道具 举报

千问 | 2011-7-7 07:39:31 | 显示全部楼层
#includeiostream
usingnamespacestd;

classcomplex{
protected:
        doublereal;
        doubleimage;
public:
        complex(doubler=0,doublei=0):real(r),image(i){}
        voidset(doubler,doublei){real=r;image=i;}
        doubleGetreal(){returnreal;}
        doubleGetimage(){returnimage;}
        friendistream(istream
        friendostream(ostream
};

istream(istream\"输入实部:\"endl;
        inz.real;
        cout\"输入虚部:\"endl;
        inz.image;
        returnin;
}

ostream(ostreamz.real\"\"z.image\"i\"endl;
        returnout;
}

intmain()
{
complext1;
complext2;
        cint1;
cint2;
coutt1;
coutt2;
        return0;
}

试一下,protect的问题不知道是不是VC的问题,VS下运行没有问题,你的operator定义友元函数时不要在操作符前加空格

我这个程序也不能运行吗?应该不会吧。。。
回复

使用道具 举报

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

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行