运算符重载为友元函数的有关问题
运算符重载为友元函数的问题
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++Á·Ï°\decnum\decnum.cpp(433) : error C2248: 'sign ' : cannot access private member declared in class 'decnum '
e:\c++Á·Ï°\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
前面的代码中报错是因为构造函数的原因
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++Á·Ï°\decnum\decnum.cpp(433) : error C2248: 'sign ' : cannot access private member declared in class 'decnum '
e:\c++Á·Ï°\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
前面的代码中报错是因为构造函数的原因