У меня есть два класса, Friend2
- друг Friend1
. После того, как Friend2
доступ к Friend1
члена Friend1
, я хочу, чтобы Friend1
мог получить доступ к Friend2
открытого пользователя 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)
переместите int friend1::comp(friend2* f2o)
в friend1.cpp
и friend2.h
оттуда.
ОБНОВЛЕНИЕ В общем, если два класса являются общими друзьями (и даже если только один из них является другом для другого), это хорошая причина подумать о дизайне.
friend1.cpp
включающий вfriend1.h
иfriend2.h
, иfriend2.h
, а затем реализацияfriend1::comp()
познакомится со структурой friend2.