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