Pilot
类包含一个指向 Cockpit
类对象的指针,而 Cockpit
类包含一个指向 Pilot
类对象的指针。这样就形成了一个循环依赖的情况,因为每个类的头文件都引用了对方的类。
为了解决这个问题,可以使用前置声明。在每个头文件中只声明类的存在而不包含完整的定义,然后在实现文件中包含完整的定义。这样就打破了循环依赖。然后在实现文件中包含完整的定义
// Pilot.h
#ifndef PILOT_H
#define PILOT_H
class Cockpit; // 前置声明 Cockpit 类
class Pilot {
public:
Pilot();
void setAircraft(Cockpit* cockpit);
void pilotAction();
private:
Cockpit* aircraft; // 使用 Cockpit 类的指针
};
#endif // PILOT_H
// Cockpit.h
#ifndef COCKPIT_H
#define COCKPIT_H
class Pilot; // 前置声明 Pilot 类
class Cockpit {
public:
Cockpit();
void setPilot(Pilot* pilot);
void cockpitAction();
private:
Pilot* pilot; // 使用 Pilot 类的指针
};
#endif // COCKPIT_H
// Pilot.cpp
#include "Pilot.h"
#include "Cockpit.h"
Pilot::Pilot() : aircraft(nullptr) {}
void Pilot::setAircraft(Cockpit\* cockpit) {
aircraft = cockpit;
}
void Pilot::pilotAction() {
// ...
}