我在以下层次结构中的 4 个不同文件中有 4 个类:
|-- Terminal (Chart)
| |-- Chart (Draw, Market)
| | |-- Draw
| | |-- Market
括号中是类指针,类实现为类变量。
所以 Draw 和 Market 类扩展了 Chart,Chart 扩展了 Terminal。虽然我仍然想定义一些类指针,但终端类本身具有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 编译器构建,上述错误是相同的。
以上问题有解决办法吗?我错过了什么?
澄清一下,我的目标是将每个类保存在一个单独的文件中。