多个循环依赖项c++
Multiple circular dependencies c++
该程序涉及用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,并且不再存在循环依赖性问题。
相关文章:
- 如何从C++中的依赖类型中获得它所依赖的类型
- 将--whole archive链接器选项与CMake和具有其他库依赖项的库一起使用
- 将依赖名称显式标记为类型名和模板的奇怪之处
- 在 Windows 上,是否可以让 dll 在不使用 PATH 环境变量的情况下在另一个文件夹中查找依赖项?
- C++GTKMM gui循环依赖关系
- 通过ccmake在cmake中缓存依赖选项
- 当基类是依赖类型时,这是一个缺陷吗
- 从不同的附加依赖项中识别等同命名的函数
- 如何在 CMake 中对目标依赖项进行分组?
- 是否可以依赖函数范围的静态变量来执行程序关闭期间调用的方法?
- 为什么构建目录中新构建的共享库与安装目录中的副本具有不同的依赖项集?
- VS 2015 链接错误 无法构建依赖于 libcurl 的项目
- 通过依赖类型使用非类型模板参数的单类型模板参数类模板的部分专用化
- 为什么内存屏障依赖于变量?
- node-gyp 的先有鸡还是先有蛋的问题:指向依赖项中的头文件
- 反转依赖于 end() 的迭代器
- GCC,CMake,预编译标头和维护依赖项
- 使用 'typename' 关键字将非类型视为依赖上下文中的类型
- 使用 Git 处理 C++ Visual Studio 2019 解决方案的外部依赖项源代码管理的最佳方法是什么?
- 为什么依赖模板类型在部分专用化中不可推导?