我有这段代码

#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' was not declared in this scope,编译器也会因Cashier.h错误而失败。取消注释就可以编译,但是我担心它不应该发生。
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。这是循环依赖的一个例子。鉴于您在Station中只有一个指向Cachier的指针,我建议您删除station.h的依赖关系并向前声明它。
#include实际上只是逐字复制该文件并将其粘贴到当前编译单元中。守护程序可以保护您免受无限包含周期的影响,但是由于守护程序的影响,#include之一不执行任何操作,即不会在相应类的声明(未定义)中吮吸。这会导致您得到错误。在station.h中,编译器在看到Cachier类型时从未见过任何关于Station类型的提及。

关于c++ - 未在此范围内声明“收银员”,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/61444050/

10-11 17:56