我有两个班级,Friend2
是Friend1
的朋友。在Friend2
访问Friend1
私有成员变量后,我希望Friend1
能够访问Friend2
的公共成员函数。所以我决定在Friend1
内使用合成。但是,编译器向我显示错误:
use of undefined type 'friend2'
然后,我尝试了另一种方式,让Friend1
成为Friend2
的朋友。但我仍然有同样的错误。有人会教我解决方法吗?很多!
#ifndef FRIEND1_H
#define FRIEND1_H
class friend2;
class friend1 {
private:
int x;
public:
friend1();
int comp(friend2* f2o);
friend class friend2;
};
friend1::friend1() {
x = 1;
}
int friend1::comp(friend2* f2o) {
return f2o->getxx(); //the error : use of undefined type
}
#endif
#ifndef FRIEND2_H
#define FRIEND2_H
#include "friend1.h"
#include <iostream>
class friend2 {
private:
int xx;
public:
friend2();
void p(friend1* f1o);
int getxx() const;
friend class friend1;
};
friend2::friend2() {}
void friend2::p(friend1* f1o) {
xx = f1o->x;
}
int friend2::getxx() const {
return xx;
}
#endif
另外,组合或朋友课更好的方法吗?为什么呢?
答案 0 :(得分:2)
您获得//the error : use of undefined type
因为class Friend2
仅被声明,此时未定义。要解决此问题,请将int friend1::comp(friend2* f2o)
实施移至friend1.cpp
,并在其中加入friend2.h
。
更新一般来说,如果两个班级是共同的朋友(即使其中只有一个是另一个朋友),那么考虑这个设计就是一个很好的理由。