次の階層の 4 つの異なるファイルにまたがる 4 つのクラスがあります。
|-- Terminal (Chart)
| |-- Chart (Draw, Market)
| | |-- Draw
| | |-- Market
括弧内は、クラスがクラス変数として実装するクラス ポインタです。
したがって、Draw および Market クラスは Chart を拡張し、Chart は Terminal を拡張します。まだいくつかのクラス ポインターを定義したいのですが、Terminal クラスchart
自体が Chart クラスへのポインターを持っています。
ファイルは次のとおりです。
Terminal.mqh
// Forward declaration.
class Chart;
class Terminal;
// Includes.
#include "Chart.mqh"
class Terminal {
protected:
Chart *chart;
};
Chart.mqh
// Forward declaration.
class Chart;
class Terminal;
// Includes.
#include "Terminal.mqh"
class Chart : public Terminal {
protected:
// Includes.
#include "Draw.mqh"
#include "Market.mqh"
// Class variables.
Draw *draw;
Market *market;
};
注:インクルードDraw
とMarket
ファイルはChart
、これらのインクルードがロードされた時点で現在のクラスが定義されていることを確認するために、クラス定義の後、およびそれを使用している変数の宣言の直前に配置されます。
Draw.mqh
// Forward declaration.
class Chart;
class Draw;
#include "Chart.mqh"
class Draw : public Chart {
// Some drawing methods.
};
Market.mqh
// Forward declaration.
class Chart;
class Market;
// Includes.
#include "Chart.mqh"
class Market : public Chart {
// Some market methods.
};
インクルードのロード中にコンパイラ エラーが発生しないようにするために、前方宣言を行っていますが、コンパイルは失敗します。
エラーは次のとおりです (コンパイルしようとしているファイルによって異なります)。
Terminal.mqh
(3 エラー、0 警告)「ターミナル」 - 未定義の構造体 Chart.mqh 8 22
「チャート」 - 未定義の構造体 Draw.mqh 7 21
「チャート」 - 未定義の構造体 Market.mqh 8 23
Chart.mqh
(2 エラー、0 警告)「チャート」 - 未定義の構造体 Draw.mqh 7 21
「チャート」 - 未定義の構造体 Market.mqh 8 23
Draw.mqh
(1 エラー、0 警告)「チャート」 - 未定義の構造体 Market.mqh 8 23
Market.mqh
(1 エラー、0 警告)「チャート」 - 未定義の構造体 Draw.mqh 7 21
最新のビルド 1498 でテスト済み。
上記のエラーは、MQL4 および MQL5 コンパイラ ビルドの両方で同じです。
上記の問題の解決策はありますか?何か不足していますか?
明確にするために、私の目標は、各クラスを個別のファイルに保持することです。