运算符重载为友元函数的有关问题

运算符重载为友元函数的问题
class   decnum
{
    friend   bool   operator==(const   decnum   &x,   const   decnum   &y);
    private:
        int     num;
        int     sign;
        char   *val;
};
bool   operator==(const   decnum   &x,   const   decnum   &y)
{
        if(x.sign   !=   y.sign)   return   false;
        if(x.num   !=   y.num)   return   false;
        for(int   i=0;   i   <   x.num;   i++)
                if(x.val[i]   !=   y.val[i])
                        return   false;
        return   true;
}
e:\c++&Aacute;·&Iuml;°\decnum\decnum.cpp(433)   :   error   C2248:   'sign '   :   cannot   access   private   member   declared   in   class   'decnum '
e:\c++&Aacute;·&Iuml;°\decnum\decnum.h(149)   :   see   declaration   of   'sign '
为什么在该类的友元函数内不能通过对象名访问它的私有成员?

------解决方案--------------------
LZ把类的代码贴全嘛,
链接时产生的错误可能不是operator==()造成的,可能是其它成员造成的

=====================================================================================
class decnum
{
decnum() {num=2; sign=1; val= new char[2];}
friend bool operator==(const decnum &x, const decnum &y);

private:
int num;
int sign;
char *val;
};
bool operator==(const decnum &x, const decnum &y)
{
if(x.sign != y.sign) return false;
if(x.num != y.num) return false;
for(int i=0; i < x.num; i++)
if(x.val[i] != y.val[i])
return false;
return true;
}

链接时报错:
E:\Documents and Settings\first\桌面\Testtttt\TestttttDlg.cpp(198) : error C2248: 'decnum::decnum ' : cannot access private member declared in class 'decnum '
E:\Documents and Settings\first\桌面\Testtttt\TestttttDlg.cpp(175) : see declaration of 'decnum::decnum '
E:\Documents and Settings\first\桌面\Testtttt\TestttttDlg.cpp(198) : error C2248: 'decnum::decnum ' : cannot access private member declared in class 'decnum '
E:\Documents and Settings\first\桌面\Testtttt\TestttttDlg.cpp(175) : see declaration of 'decnum::decnum '
Error executing cl.exe.

Testtttt.exe - 2 error(s), 0 warning(s)

===================================================================================


class decnum
{
public:
decnum() {num=2; sign=1; val= new char[2];}
friend bool operator==(const decnum &x, const decnum &y);

private:
int num;
int sign;
char *val;
};
bool operator==(const decnum &x, const decnum &y)
{
if(x.sign != y.sign) return false;
if(x.num != y.num) return false;
for(int i=0; i < x.num; i++)
if(x.val[i] != y.val[i])
return false;
return true;
}

就可以编译过去了,下面的代码中类定义的开始位置多了关键字public

类中成员的默认权限为private

前面的代码中报错是因为构造函数的原因