我有两个班,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
另外,作文或朋友班是更好的方法吗?为什么?
最佳答案
之所以得到//the error : use of undefined type
,是因为仅声明了class Friend2
,而此时尚未定义。为了解决此问题,将int friend1::comp(friend2* f2o)
实现转移到friend1.cpp
并从此处包含friend2.h
。
更新通常,如果两个类是共同的朋友(即使其中只有一个是另一个的朋友),这也是考虑设计的一个很好的理由。
关于c++ - C++错误:使用未定义的类型,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25502891/