Ошибки, баги, вопросы - страница 1784

 
Rashid Umarov:
Посмотрите здесь - Выполнение программ

раткая сводка по программам на MQL5 приведена в таблице:

Программа

Выполнение

Примечание

Скрипт

В собственном потоке, сколько скриптов - столько потоков выполнения для них

Зацикленный скрипт не может нарушить работу других программ

Эксперт

В собственном потоке, сколько экспертов - столько потоков выполнения для них

Зацикленный эксперт не может нарушить работу других программ

Индикатор

Один поток выполнения для всех индикаторов на одном символе. Сколько символов с индикаторами - столько потоков выполнения для них

Бесконечный цикл в одном индикаторе остановит работу всех остальных индикаторов на этом символе

Спасибо, имелось в виду это

Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий

Ошибки, баги, вопросы

Slawa, 2017.02.06 07:22

Но и тут нельзя закладываться на то, что команда Deinit на M5 будет обработана раньше, чем команда Init на M15

 
-Aleks-:

Увы, не ведом мне этот формат.

Эксперимент показал, что число в графическом буфере представлено по тем же правилом что и double - т.е. передать такое длинное число через графический буфер не представляется возможным - огорчило.

 Увы, в графическом буфере умещается только число из 10 знаков.

Кстати, почему там ограничение в 4 знака после запятой? 

 

Ошибка при компиляции (точнее отсутствие сообщения об ошибке)

class A {
public:
        int i;
};
class B : public A {};
class C : protected A {};
class D : protected B {};
void OnStart()
{
        C c;
        Print( c.i ); //Error: 'i' - protected member access error
        D d;
        Print( d.i ); //нормально???
}
 

Ошибка при выполнении: EX5 loading failed

class A;
typedef void (*f)( A*);
class A {
    virtual void g( A *a ) {}
        f ff;
};
void OnStart() { Print( __FUNCTION__ ); }
 

Ошибка при выполнении

class B;
void f( B* );
class A { public:
        virtual ~A() { f((B *)&this ); } //(*)
        virtual void g( A* ) { Print( __FUNCTION__ ); }
};
class B : public A { public:
        virtual void g( A* ) { Print( __FUNCTION__ ); }
};
void f( B *b ) { b.g( b ); }
void OnStart() //(1)
{
        B *b = new B;
        delete b;
}

Результат: incorrect casting of pointers in (*)

А если 

void OnStart() { B b; } //(2)

то результат: B::g

а в чем принципиальная разница между OnStart (1) и (2) ???

Кроме того результат подобного кода в С++: A::g


 

 

A100: 

Для чего может быть нужен виртуальный деструктор, как в Вашем примере выше? Разве его можно переопределить в потомке?

 
fxsaber:

Для чего может быть нужен виртуальный деструктор, как в Вашем примере выше? Разве его можно переопределить в потомке?

В MQL он всегда виртуальный, даже если это не указано явно
 
A100:
В MQL он всегда виртуальный, даже если это не указано явно
Так Вы на вопрос не ответили - для чего?
 
fxsaber:
Так Вы на вопрос не ответили - для чего?
Если в MQL все деструкторы виртуальные, то вопрос для чего нужен виртуальный деструктор сводится в вопросу для чего нужен деструктор? А это слишком общий вопрос
 
A100:
Если в MQL все деструкторы виртуальные, то вопрос для чего нужен виртуальный деструктор сводится в вопросу для чего нужен деструктор? А это слишком общий вопрос
Знаю, для чего нужен деструктор. Мне непонятно, для чего перед его определением прописывать слово virtual?
Причина обращения: