C++ ';出纳';未在此范围中声明
我有这段代码C++ ';出纳';未在此范围中声明,c++,forward-declaration,C++,Forward Declaration,我有这段代码 #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>
#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
怎么可能呢?它在头文件中明确声明,据我所知,#include
只不过是将一个文件的内容粘贴到另一个文件中
提前感谢您的回答 您的站点.h包括cachier.h。这是循环依赖的一个例子。鉴于您在
Cachier
中只有一个指向Station
的指针,我建议删除Station.h
的依赖项并向前声明它
#include
实际上就是将该文件逐字复制并粘贴到当前编译单元中。防护装置保护您免受无限包含循环的影响,但由于防护装置的存在,#include
s中的一个什么也不做,即,不吸入相应类的声明(或定义)。这将导致您得到的错误。在station.h中,当编译器看到站
类型时,它从未看到任何提到Cachier
类型的内容。如果我在站
中有一个指向出纳
的指针,会发生什么?或者这是完全错误的设计吗?您仍然需要向前声明用作指针的类型。它是否绝对是糟糕的设计取决于您的整个环境。话虽如此,在现代C++中,你应该尽量避免原始指针,除非你知道为什么和什么时候忽略这个建议。看一看,看一看。但是请注意,这并不能解决您的循环包含问题。感谢您的时间和澄清。你帮了我很多!
#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