我有这段代码
#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
您的station.h包括cachier.h。这是循环依赖的一个例子。鉴于在Station
中只有一个指向Cachier
的指针,我建议删除station.h
的依赖项并向前声明。
#include
实际上只是将该文件的逐字复制并将其粘贴到当前编译单元中。守卫保护您免受无限包含周期的影响,但是由于守卫的保护,#include
之一不执行任何操作,即NOT