多个循环依赖项c++

Multiple circular dependencies c++

本文关键字:c++ 依赖 循环      更新时间:2023-10-16

该程序涉及用C++编程的铁路网模拟。该程序由五个不同的类别组成,即控制器(跟踪时间并安排新事件)、网络(将模型的不同部分聚集在一起)、列车、车站和跳闸。

跳闸基本上是一个以站点为起点和终点的节点。火车取决于行程,因为火车会跟踪它要去的地方。车站有一列火车。依赖关系如下图所示。

图形

我看过相关问题中提出的解决方案,但这些解决方案只涉及一个简单的a->B,B->a关系。下面是一些相关的代码片段。

编辑:首先,编译工作站。这没有问题,但当我切换到跳闸时,它会出现以下形式的错误:

g++  --std=c++14 -Wall -g -O2 -c -o tmp/o/3train1.o train/train1.cc
In file included from train/../trip/trip.h:4:0,
                 from train/train.h:6,
                 from train/train.ih:1,
                 from train/train1.cc:1:
train/../trip/../station/station.h:13:14: error: ‘Train’ was not declared in this scope
  std::vector<Train*> d_trains;

trip.h

#include "../station/station.h"
#include <chrono>
class Station; // forward declaration
class Trip
{
    Station &d_beginStation;
    Station &d_endStation;
    std::chrono::minutes d_durationTrip;

列车.h

#include "../trip/trip.h"
class Train
{
    typedef std::chrono::system_clock::time_point Timepoint;
    size_t d_id;
    std::list<Trip*> &d_route;

station.h

#include "../train/train.h"
class Station
{
    std::string d_name;
    std::chrono::minutes d_waitTimeStation;
    std::vector<Train*> d_trains;

network.h

#include "../train/train.h"
#include "../station/station.h"
#include "../trip/trip.h"
class Network
{
    typedef std::list<Trip> Route;
    std::list<Train *> d_trains;
    std::list<Station> d_stations;
    std::list<Route> d_routes;

使用更多的前向声明来放松所有这些标头之间的依赖关系。

当您有一个Station&时,您已经转发声明了Station;现在,当您有std::vector<Train*>时,正向声明Train,依此类推

然后,您可以删除大量的include,并且不再存在循环依赖性问题。