有没有办法为两个 类 声明共同的朋友函数
Is there any way to declare mutual friend functions for two classes
class CDB;
class CDM
{
public:
friend CDB& CDB::Add(const CDM&);
CDM& Add(const CDB&);
};
class CDB
{
public:
CDB& Add(const CDM&);
friend CDM& CDM::Add(const CDB&);
};
此代码给出错误:错误 C2027:使用未定义的类型 'CDB'。如何解决这个问题。
不,你不能那样做。没有办法去除循环依赖。
你应该能够让 class CDB
成为 CDM
的朋友,而不是想与 CDB::Add()
成为朋友。
class CDB;
class CDM
{
public:
friend class CDB;
CDM& Add(const CDB&);
};
class CDB
{
public:
CDB& Add(const CDM&);
friend CDM& CDM::Add(const CDB&);
};
您可以使用文件静态函数作为中继:
class CDB;
class CDM;
static CDB& CDBAdd(CDB&, const CDM&);
class CDM
{
public:
friend CDB& CDBAdd(CDB&, const CDM&);
CDM& Add(const CDB&);
};
class CDB
{
public:
CDB& Add(const CDM& other) {
return CDBAdd(*this, other);
}
friend CDM& CDM::Add(const CDB&);
friend CDB& CDBAdd(CDB&, const CDM&);
private:
CDB& doAdd(const CDM& other); // will contain the actual implementation
};
CDB& CDBAdd(CDB& obj, const CDM& other) {
return obj.doAdd(other);
}
// other implementations ...
class CDB;
class CDM
{
public:
friend CDB& CDB::Add(const CDM&);
CDM& Add(const CDB&);
};
class CDB
{
public:
CDB& Add(const CDM&);
friend CDM& CDM::Add(const CDB&);
};
此代码给出错误:错误 C2027:使用未定义的类型 'CDB'。如何解决这个问题。
不,你不能那样做。没有办法去除循环依赖。
你应该能够让 class CDB
成为 CDM
的朋友,而不是想与 CDB::Add()
成为朋友。
class CDB;
class CDM
{
public:
friend class CDB;
CDM& Add(const CDB&);
};
class CDB
{
public:
CDB& Add(const CDM&);
friend CDM& CDM::Add(const CDB&);
};
您可以使用文件静态函数作为中继:
class CDB;
class CDM;
static CDB& CDBAdd(CDB&, const CDM&);
class CDM
{
public:
friend CDB& CDBAdd(CDB&, const CDM&);
CDM& Add(const CDB&);
};
class CDB
{
public:
CDB& Add(const CDM& other) {
return CDBAdd(*this, other);
}
friend CDM& CDM::Add(const CDB&);
friend CDB& CDBAdd(CDB&, const CDM&);
private:
CDB& doAdd(const CDM& other); // will contain the actual implementation
};
CDB& CDBAdd(CDB& obj, const CDM& other) {
return obj.doAdd(other);
}
// other implementations ...