3.头文件循环依赖问题

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() {
// ...
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值