该计划涉及用C ++编程的铁路网络模拟。该计划包括五个不同的类,即控制器(跟踪时间和安排新事件),网络(一起抓住模型的不同部分),火车,车站和旅行。
Trip基本上是一个以站点为起点和终点的节点。火车取决于旅行,因为火车跟踪它必须去的地方。车站有火车矢量。依赖关系在图中如下所示。
我已经查看了相关问题中提出的解决方案,但这些解决方案仅涉及简单的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;
答案 0 :(得分:2)
使用更多前向声明来放松所有这些头之间的依赖关系。
当您拥有Station
时,您已经转发了声明的Station&
;现在,如果您有Train
,则向前声明std::vector<Train*>
,依此类推。
然后你可以删除大量的包含,而且你不再有循环依赖问题。