问题
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&);
};
This code gives me the error : error C2027: use of undefined type 'CDB'. How to resolve this.
回答1:
No, you can't do that. There is no way to remove the cyclic dependency.
You should be able to get by with making the class CDB
a friend of CDM
instead of wanting to making CDB::Add()
a friend.
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&);
};
回答2:
You could use a file static function as relay :
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 ...
来源:https://stackoverflow.com/questions/30623805/is-there-any-way-to-declare-mutual-friend-functions-for-two-classes