このプログラムは、C++でプログラムされた鉄道網のシミュレーションに関係しています。プログラムは5つの異なるクラス、すなわち、コントローラ(時間を追跡し、新しいイベントをスケジュールする)、ネットワーク(モデルの異なる部分を一緒に掴む)、列車、駅および旅行からなる。複数の循環依存関係C++
トリップは基本的に、開始点と終了点としてのステーションを持つノードです。列車は行くべき場所を把握しているので、列車は旅行に依存します。駅には列車のベクトルがあります。依存関係は図のようになります。
私は関連の質問で提案された解決策を見てきましたが、これらのソリューションは、単純なA懸念 - > B、B - >関係を。以下は、コードの関連するスニペットです。
編集:まず、ステーションがコンパイルされます。これは何の問題を与えていないが、私はトリップする切り替えたとき、それは次の形式のエラーを与える:
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;
実際の問題は何ですか?これは機能していないのですか?あなたはどんなエラーが出ていないのですか? – NathanOliver
Forward Referencesを参照してください。http://stackoverflow.com/questions/4757565/c-forward-declaration – Robinson
実際のエラーメッセージも表示するように質問を編集しました。私はそれを見ましたが、私はただ2つのクラスでこれを取り巻く私の頭を把握することができます。この問題がより多くのクラスに拡張されたとき、私はこれがどのように機能するかわかりません。 – bytefast