а если упростить еще больше - перенести все в один файл к OnInit и убрать поля double
а если упростить еще больше - перенести все в один класс и убрать поля double
Не вполне понял, что переносить в один класс. Закомментаренную декларацию ?
И поля дубль - если убрать, то оставить пустой класс CAdvisorData ?
Не вполне понял, что переносить в один класс. Закомментаренную декларацию ?
И поля дубль - если убрать, то оставить пустой класс CAdvisorData ?
sergeev:
не класс, а файл
Тоже самое получается.
А ! Разобрался.
Форвардная декларация класса требует обязательного последующего объявления такого класса, даже если этот класс нигде не используется. (В реальном коде я его объявил просто на будущее, пока еще нигде не использую). Как только класс СFoo был описан в конце файла - тут же ошибка исчезла.
Сейчас исправлю название темы. А... Уже не могу исправить. Ну, пусть модератор исправит. Нельзя заранее объявлять классы, если потом не объявляешь их окончательно.
Наверно надо в сервисдеск послать, чтобы ошибка вылетала более осмысленная, типа "отсутствие класса, описанного в форвардной декларации".
....
Написал предложение в Сервисдеск.
Спасибо за сообщение, исправлено.

- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Упростил уже до безобразия, и отловил интересную ситуацию.
Имеем два файла.
Файл самого будущего советника, в нем один #include и одна функция Инит, возвращающая нуль:
#include "MyData.mqh"
int OnInit()
{
return(0);
}
Файл MyData тоже очень простой:
// class CFoo; // ОБРАЩАЕМ ВНИМАНИЕ НА ЭТУ ПОКА ЗАКОММЕНТАРЕННУЮ ДЕКЛАРАЦИЮ.
class CAdvisorData
{
public:
double m_dFirstData;
double m_dSecondData;
};
Все замечательно компилируется и запускается.
Но как только во втором файле раскомментариваем форвардную декларацию класса - все по-прежнему прекрасно компилируется, но при попчтке запуска вылетает сообщение "internal error #-1008, EX5 write error".
Какие мысли, где я допустил ляпсус ?
Вроде как форвардная декларация не должна ничего менять...