多个循环依赖c ++

时间:2016-04-08 14:18:54

标签: c++ circular-dependency

该计划涉及用C ++编程的铁路网络模拟。该计划包括五个不同的类,即控制器(跟踪时间和安排新事件),网络(一起抓住模型的不同部分),火车,车站和旅行。

Trip基本上是一个以站点为起点和终点的节点。火车取决于旅行,因为火车跟踪它必须去的地方。车站有火车矢量。依赖关系在图中如下所示。

Graph

我已经查看了相关问题中提出的解决方案,但这些解决方案仅涉及简单的A - > B,B - >一段感情。以下是代码的一些相关摘要。

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

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;

train.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;

1 个答案:

答案 0 :(得分:2)

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

当您拥有Station时,您已经转发了声明的Station&;现在,如果您有Train,则向前声明std::vector<Train*>,依此类推。

然后你可以删除大量的包含,而且你不再有循环依赖问题。