我有这段代码
#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/