virtual bool log_close(); { return false; }
Так это в вашем приведённом коде.
Приводите точный код, который у вас не перегружается. И где/как используется - тоже.
// в библиотеке class strateg2 { public: virtual bool log_open_buy() { return (PositionsTotal() == 0 && OrdersTotal() == 0); } virtual bool log_open_sell() { return (PositionsTotal() == 0 && OrdersTotal() == 0); } virtual bool log_close() { return false; } };
// в эксперте class proba: public strateg2{ bool log_close() { if(PositionsTotal() > 0 && PositionSelect(_Symbol)) { if((ENUM_POSITION_TYPE)PositionGetInteger(POSITION_TYPE) == POSITION_TYPE_BUY && log_open_sell()) { Print(1); } if(((ENUM_POSITION_TYPE)PositionGetInteger(POSITION_TYPE) == POSITION_TYPE_SELL && log_open_buy())) { Print(2); } } return ((PositionsTotal() > 0 && PositionSelect(_Symbol)) && (((ENUM_POSITION_TYPE)PositionGetInteger(POSITION_TYPE) == POSITION_TYPE_BUY && log_open_sell()) || ((ENUM_POSITION_TYPE)PositionGetInteger(POSITION_TYPE) == POSITION_TYPE_SELL && log_open_buy()))); } };
У вас в proba::log_close() всегда будет false из-за "&& log_open_*()", в которых проверка "PositionsTotal() == 0", а вы перед этим проверяете "PositionsTotal() > 0". И Print'ы никогда не отработают.
дело не совсем в принтах. хотя на ошибку вы мне правильно указали. но компилятор не попадает туда в принципе. я убрал этот кусочек с log_open_buy, но сама галочка отладки следает при тестировании. работает именно функция из библиотеки. она не перегрузилась в эксперте.
На всякий случай покажите создание и использование объекта.
Убедитесь, что на самом деле подключаете именно ту библиотеку, где функция объявлена как virtual.
Или напишите минимальный код, гарантированно воспроизводящий ошибку, и напишите в https://www.mql5.com/ru/forum/1111
Если ошибка действительно есть и у разработчиков воспроизведётся - могут поправить.
Примерчик накидал...
class Strateg { public: virtual void log_close() { Print(__FUNCTION__); } virtual void log_open_buy(int a) { Print(__FUNCTION__, a); } virtual void log_open_buy(double a) { Print(__FUNCTION__, a); } }; class Str_cloud : public Strateg { public: void log_close() { Print(__FUNCTION__); } virtual void log_open_buy(int a) { Print(__FUNCTION__, a); } }; int OnInit() { Print("=== START ==="); Strateg strateg = Strateg(); strateg.log_close(); Str_cloud str_cloud = Str_cloud(); str_cloud.log_close(); str_cloud.log_open_buy(1); str_cloud.log_open_buy(1.0); Print("=== END ==="); return(INIT_FAILED); }
Вывод:
=== START ===
Strateg::log_close
Str_cloud::log_close
Str_cloud::log_open_buy1
Strateg::log_open_buy1.0
=== END ===

- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Объявляю потомка в эксперте
как ее правильно перегрузить? и почему аналогично написанные функции перегружаются, а эта нет?