У меня есть 4 класса в 4 разных файлах в следующей иерархии:
|-- Terminal (Chart)
| |-- Chart (Draw, Market)
| | |-- Draw
| | |-- Market
В скобках указаны указатели классов, которые класс реализует как переменные класса.
Таким образом, классы Draw и Market расширяют 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.
};
Чтобы избежать каких-либо ошибок компилятора во время загрузки включений, я делаю предварительную декларацию, однако компиляция все еще не выполняется.
Ошибки следующие (в зависимости от того, какой файл я пытаюсь скомпилировать):
- #P8#
#P9# #P10# #P11#
- #P12# <цитата> #P13# #P14# цитата>
- #P15# <блочная цитата> #P16# блочная цитата>
- #P17# <блочная цитата> #P18# блочная цитата>
Протестировано в последней сборке 1498.
Описанные выше ошибки одинаковы для сборок компилятора MQL4 и MQL5.
Есть ли решение вышеуказанной проблемы? Я что-то упускаю?
Чтобы уточнить, моя цель - сохранить каждый класс в отдельном файле.