'Cashier' 未在此范围内声明

'Cashier' was not declared in this scope

我有这段代码

#ifndef STATION_H
#define STATION_H

#include <vector>
#include "Dispenser.h"
#include "Cashier.h"

//class Cashier;

class Station
{
private:
    int price;
    int dispenser_count;
    int cashier_count;
    std::vector<Dispenser> dispensers;
    std::vector<Cashier> cashiers;

public:
    Station(int, int, int);
    int GetPrice() const { return price; }

    Dispenser *LookForUnoccupiedDispenser(int &id);
    Dispenser *GetDispenserByID(int id);

    Cashier *LookForUnoccupiedCashier();
};

#endif // STATION_H

当我对 class Cashier 行进行注释时,即使包含了 Cashier.h,编译器也会失败并出现 'Cashier' was not declared in this scope 错误。取消注释使编译成为可能,但我担心它不应该发生。

Cashier.h

#ifndef CASHIER_H
#define CASHIER_H

#include "Station.h"

class Station;

class Cashier
{
private:
    bool busy;
    Station *at_station;

public:
    Cashier(Station *employer);

    bool IsBusy() const { return busy; }
};


#endif // CASHIER_H

怎么可能?它在头文件中明确声明,据我所知,#include 只不过是将一个文件的内容粘贴到另一个文件中。

提前感谢您的解答!

您的 station.h 包括 cachier.h。这是循环依赖的一个例子。鉴于您在 Cachier 中只有一个指向 Station 的指针,我建议删除 station.h 的依赖项并转发声明它。

#include 字面意思就是将该文件逐字复制并粘贴到当前编译单元中。守卫保护你免受无限包含循环的影响,但由于守卫,#includes 中的一个什么都不做,即 NOT 吸收声明(也不是定义) 各自的 class。这会导致您收到错误。在 station.h 中,编译器在看到 Station 类型时从未看到任何提及 Cachier 类型。