Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/143.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ ';出纳';未在此范围中声明_C++_Forward Declaration - Fatal编程技术网

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