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

 
A100:
По крайней мере предупреждение компилятор должен выдавать, что a.f() не const
Спасибо за внимательность, поправили обе ошибки.
 
mql5:
Спасибо за внимательность, поправили обе ошибки.
Только последняя - это формально не ошибка - только предупреждение должно быть. Ошибка только если
class B {
public:
        A * const a;
};

А вот в шаблонах.  Примеры приведу позже

 

   Здесь тоже - не понятно

class A {
public:
};

void ex1( const A* &t1, const A* &t2 )
{
        const A* t = t1;
        t1 = t2;
        t2 = t;
}

void OnStart()
{
    const A *a1 = new A(), *a2 = new A();
    Print( "Было :" a1, " ", a2 ); // Было :1 2
    ex1( a1, a2 );
    Print( "Стало:" a1, " ", a2 ); // Стало:2 1
    delete( a1 );
    delete( a2 );
}

все работает правильно, а если добавить промежуточную функцию ex2(...) 

void ex2( const A* &t1, const A* &t2 ) { ex1( t1, t2 ); }

void OnStart()
{
    сonst A *a1 = new A(), *a2 = new A();
    Print( "Было: ", a1, " ", a2 ); // Было :1 2
    ex2( a1, a2 );
    Print( "Стало:", a1, " ", a2 ); // Cтало:2 2           <-----
    delete( a1 ); delete( a2 );
}

Результат отличается. А что сделала ex2(...) ? - просто передала указатели по ссылке дальше

Посмотрите пожалуйста

 
A100:

   Здесь тоже - не понятно

все работает правильно, а если добавить промежуточную функцию ex2(...) 

Результат отличается. А что сделала ex2(...) ? - просто передала указатели по ссылке дальше

Посмотрите пожалуйста

Спасибо, ошибка оптимизатора языка, исправлено.
 

Не первый раз уже, но только тут фотографии при загрузке получаются такие, значит какие то стоят критерии(наверное у вас стоит определенный размер
). Везде нормально отображаются. Подскажите пожалуйста в чем дело.


 
Возникает ненужная ошибка компиляции, если в макросе используется приведение типа результата, и возвращаемое значение в дальнейшем - не используется (иногда оно нужно, иногда - нет)
int g( int x ) { return ( x ); }

#define F( X )    (long)g( X )

void OnStart()
{
        int f = F( 0 ); //нормально
        F( 0 );         //ошибка компиляции
}
 
A100:
Возникает ненужная ошибка компиляции, если в макросе используется приведение типа результата, и возвращаемое значение в дальнейшем - не используется (иногда оно нужно, иногда - нет)

Это не связано с использованием дефайнов.

Простой эквивалент дефайна тоже выдаст ту же ошибку

(long)g(0);


'(long)' - expression has no effect


P.S. Теперь тут будет ворнинг.

 

После перекомпиляции индикатора при работе с динамическими массивами стала возникать ошибка "array out of range".

Раньше не было. Что делать? 

Документация по MQL5: Основы языка / Типы данных / Объект динамического массива
Документация по MQL5: Основы языка / Типы данных / Объект динамического массива
  • www.mql5.com
Основы языка / Типы данных / Объект динамического массива - Документация по MQL5
 
MoneyJinn:

После перекомпиляции индикатора при работе с динамическими массивами стала возникать ошибка "array out of range".

Раньше не было. Что делать? 

Если у вас в начале файла прописаны похожие строки

#include <File.mqh> , то скорее всего эти включаемые файлы были изменены с момента вашей предыдущей компиляции, вами или кем то другим

 
Olegts:

Если у вас в начале файла прописаны похожие строки

#include <File.mqh> , то скорее всего эти включаемые файлы были изменены с момента вашей предыдущей компиляции, вами или кем то другим

Включаемых файлов нет.