“收银员”未在此范围内声明

问题描述 投票:0回答:1

我有这段代码

#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只是将文件的内容粘贴到另一个文件中。

谢谢您提前回答!

我有这段代码#ifndef STATION_H #define STATION_H #include #include“ Dispenser.h” #include“ Cashier.h” //类收银员; class Station {private:int price; int ...

c++ forward-declaration
1个回答
1
投票

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

#include实际上只是将该文件的逐字复制并将其粘贴到当前编译单元中。守卫保护您免受无限包含周期的影响,但是由于守卫的保护,#include之一不执行任何操作,即NOT

© www.soinside.com 2019 - 2024. All rights reserved.