多重循环依赖c++
Multiple circular dependencies c++
该程序涉及用 C++ 编写的铁路网络模拟。该程序由五个不同的 类 组成,即 Controller(跟踪时间并安排新事件)、Network(将模型的不同部分抓在一起)、Train、Station 和 Trip。
旅行基本上是一个以车站为起点和终点的节点。火车取决于行程,因为火车会跟踪它必须去的地方。车站有火车矢量。依赖关系如下图所示。
我看过相关问题中提出的解决方案,但这些解决方案仅涉及简单的 A -> B,B -> A 关系。下面是一些相关的代码片段。
编辑:首先编译站。这没有问题,但是当我切换到 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;
使用更多的前向声明来放松所有这些 header inter-dependencies.
当你有 Station&
时,你已经向前声明了 Station
;现在当你有 std::vector<Train*>
时向前声明 Train
,依此类推。
然后你可以删除大量的包含并且你不再有循环依赖问题。
该程序涉及用 C++ 编写的铁路网络模拟。该程序由五个不同的 类 组成,即 Controller(跟踪时间并安排新事件)、Network(将模型的不同部分抓在一起)、Train、Station 和 Trip。
旅行基本上是一个以车站为起点和终点的节点。火车取决于行程,因为火车会跟踪它必须去的地方。车站有火车矢量。依赖关系如下图所示。
我看过相关问题中提出的解决方案,但这些解决方案仅涉及简单的 A -> B,B -> A 关系。下面是一些相关的代码片段。
编辑:首先编译站。这没有问题,但是当我切换到 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;
使用更多的前向声明来放松所有这些 header inter-dependencies.
当你有 Station&
时,你已经向前声明了 Station
;现在当你有 std::vector<Train*>
时向前声明 Train
,依此类推。
然后你可以删除大量的包含并且你不再有循环依赖问题。