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

 
В очередной раз возникает проблема с бесполезными warnings при компиляции кода МТ5(build 2380).
Прошу рассмотреть возможность отключения ненужных для разработчика предупреждений компилятора:
declaration of 'm_range' hides member   
   in template 'NodeArray<NodeArray<TailArray<int>>>' specified with [T=NodeArray<TailArray<int>>]      
   see previous declaration of 'm_range'        
declaration of 'm_range' hides member
   in template 'NodeArray<NodeArray<NodeArray<TailArray<int>>>>' specified with [T=NodeArray<NodeArray<TailArray<int>>>]
   see previous declaration of 'm_range'

Исходный код, прототип мультиразмерного массива (C++ online: https://onlinegdb.com/Hk7QjyRdL):
#define PRINT(x) ; Print(#x, ":", string(x))

template<typename T>
class TailArray{
protected:
   int m_index;
   T data[];
   
protected:
   TailArray(){}   
public:     
   TailArray(int size){
      ArrayResize(data, size);
      m_index = 0;
   };
   
   T value(){
      int index = m_index;
      m_index = 0;
      return data[index];
   }
   const T operator=(const T value){
      data[m_index] = (T)value;
      m_index = 0;
      return value;
   };
};

template<typename T>
class NodeArray : public T{
protected:
   int m_range;
   
protected:
   NodeArray(){}   
public:     
   NodeArray(const NodeArray &src){ this = src;}
   template<typename T_int> NodeArray(T_int count, T_int r1) : T(count * r1), m_range(r1){}
   template<typename T_int> NodeArray(T_int count, T_int r1, T_int r2) : T(count * r1, r2), m_range(r1){}
   template<typename T_int> NodeArray(T_int count, T_int r1, T_int r2, T_int r3) : T(count * r1, r2, r3), m_range(r1){}
   
   T* operator[](int index){
      this.m_index = this.m_index * this.m_range + index;
      return &this;
   }
};


#define MultiArray(type, size) MultiArray##size(type)
#define MultiArray2(type) NodeArray<NodeArray<TailArray<type>>>
#define MultiArray3(type) NodeArray<NodeArray<NodeArray<TailArray<type>>>>


template<typename T>
class MultiArrayCreate{
public:
   static MultiArray(T, 2) Size(int range_1, int range_2){
      return (MultiArray(T, 2)(range_1, range_2, 1));
   }
   static MultiArray(T, 3) Size(int range_1, int range_2, int range_3){  
      return (MultiArray(T, 3)(range_1, range_2, range_3, 1));
   }
};


void OnStart(){
   MultiArray(int, 2) arr_2 = MultiArrayCreate<int>::Size(4, 4);
   MultiArray(int, 3) arr_3 = MultiArrayCreate<int>::Size(4, 4, 4);
   
   arr_2[0][0] = 2233;
   arr_3[3][3][3] = 4455;
   PRINT(arr_2[0][0].value());
   PRINT(arr_3[3][3][3].value());
}
 

Всем добрый день!

Подскажите пожалуйста как вставить картинку в описание скрипта при оформлении и последующей публикации в CodeBase?

У меня есть только, почему то, вставка видео с Youtube..., а иконки вставки рисунка НЕТ! :(

Заранее Спасибо! :)

 
gsl17:

Всем добрый день!

Подскажите пожалуйста как вставить картинку в описание скрипта при оформлении и последующей публикации в CodeBase?

У меня есть только, почему то, вставка видео с Youtube..., а иконки вставки рисунка НЕТ! :(

Заранее Спасибо! :)

Кнопка вставки рисунка  Кнопка рисунок доступна пользователем начиная с некоторого минимального рейтинга. Очевидно у Вас недостаточен рейтинг для работы с кнопкой   Кнопка рисунок .

 
Vladimir Karputov:

Кнопка вставки рисунка   доступна пользователем начиная с некоторого минимального рейтинга. Очевидно у Вас недостаточен рейтинг для работы с кнопкой    .

Спасибо за пояснения.

Печалька ... 

P.S. Да, действительно, я первый раз выставлял скрипт на CodeBase.

 
Билд 2390 мт 5 профилировщик на истории работает на реальных данных нет.
 

Дефекты в работе кеша шаблонной функции/класса:
(исправлено MT5(build 2390)) ***  (up)   Undefined Behavior, создаешь сложный несколько раз обернутый объект с внутренним типом "С", а там оказывается совсем другой тип данных, может "B", может "int", что хочешь...
(исправлено MT5(build 2390)) *             Compile Error, баг при передаче в качестве const ref template аргумента указателя на функцию.
(исправлено MT5(build 2390)) *             Compile Error, объект B<int> можно создать после объекта класса B<void*>, но если сделать это перед, то возникает ошибка компиляции.


Дефекты в работе шаблонной функции/класса:
(исправлено MT5(build 2390)) **  (up)        Compile Error, баг при попытке доступа к internal class для шаблонного параметра шаблонной функции.
(исправлено MT5(build 2390)) *   (up)        Compile Error, баг внутри шаблонной функции, переданный указатель в рамках операции явного приведения типа ведет себя как класс в остальных случаях - как указатель.
(не исправлено MT5(build 2390)) ***          Compile Error, Основная претензия к неуместному выводу warning - "deprecated behavior, hidden method calling will be disabled in a future MQL compiler version". Текущая реализация - это стрельба с  пушки по воробьям.
(не исправлено MT5(build 2390)) **           Compile Error, баг касается возвращаемого значения шаблонной функции, когда возвращаемое значение - internal class, расположенный внутри шаблонного класса, тип параметра которого задается типом аргумента шаблонной функции.
(не исправлено MT5(build 2390)) **           Compile Error, баг связанный с пространством имен и области видимости в шаблонном конструкторе при вызове базового класса, когда используется одно и то же имя класса при наследовании и в internal class.
(не исправлено MT5(build 2390)) *            Compile Error, баг при вызове шаблонной функции с явным указанием типов аргументов, когда вызов выполняется из перегруженной нешаблонной функции.
(не исправлено MT5(build 2390))              Compile Error, баг при определении internal class - отсутствует возможность явно сослаться на глобальное пространство имен при указании базового класса.
(исправлено MT5(build 2390)) **           Compile Error, баг с генерацией кода шаблонного класса при использовании internal class.
(исправлено MT5(build 2390)) *            Compile Error, баг при генерации шаблонного метода/класса, процесс "автозамены" шаблонного параметра выходит за пределы скоупа в основной код программы.
(исправлено MT5(build 2390)) *            Compile Error, баг с отсутствием автоматической генерации кода шаблонного класса, когда шаблонный класс выступает в качестве return value для шаблонного метода.
(исправлено MT5(build 2390)) *            Compile Error, баг при передаче internal struct в шаблонную функцию, полученный тип данных невозможно использовать как базовый тип данных для другой internal struct в шаблонном классе.
(исправлено MT5(build 2390)) *            Compile Error, не выполняется проверка на наличие повторно использованных имен шаблонных типов при объявлении шаблонной функции внутри шаблонного класса, что приводит к неожидаемому поведению.
(исправлено MT5(build 2390))              Compile Error, множество дефектов связанных с return "in place created" object, когда объектом выступает шаблонный класс/структура.
(исправлено MT5(build 2368)) *            (It's not a bug, it's a feature) в конструкторе базового класса невозможно выполнить explicit typecast по приведению указателя на объект базового класса к указателю на родительский класс.
(не исправлено MT5(build 2390))     (new)   Compile Error, при использовании модификатора доступа по умолчанию при наследовании в шаблонном классе, когда шаблонный параметр выступает базовым классом.
(не исправлено MT5(build 2390)) *   (new)   Compile Error, при вызове оператора присвоения через явное указание базового класса. Проблема проявляется для шаблонного класса, у которого шаблонный параметр выступает базовым классом.


Дефекты связанные с несоответствием приоритетов вызовов перегруженных функций в MQL в сравнении с С++:
(исправлено MT5(build 2390)) **  (up)        Compile Error, когда первая из перегруженных шаблонных функций использует полностью специализированный шаблонный базовый класс, а вторая - неспециализированный шаблонный базовый класс.
(не исправлено MT5(build 2390)) **           Compile Error, при генерации кода шаблонной функции возникает ошибка компиляции несмотря на то, что имеется перегруженная шаблонная функция с подходящей сигнатурой для передаваемых параметров.
(не исправлено MT5(build 2390)) *            Compile Error, "ambiguous call to overloaded function" при вызове перегруженных шаблонных функций с разным количеством шаблонных параметров.
(исправлено MT5(build 2390)) **  (up)        Compile Error, приоритет вызовов перегруженных шаблонных функций в действительности зависит от типа шаблонного параметра, который, в теории ни как не должен влиять на результат компиляции.
(исправлено MT5(build 2390)) ***          Compile Error, когда есть наследование классов A <= B <= C <= D и реализованы две overloading функции, например одна c параметра А*, а вторая с B*, то передача в такую функцию объекта C* или D* в MQL вызывает ошибку компиляции.
(исправлено MT5(build 2390)) **           Runtime, несоответствие приоритетов для вызовов перегруженных шаблонных функций.
(исправлено MT5(build 2390)) ***          Runtime, при выборе подходящей перегруженной функции для аргумента типа указатель более приоритетной становится функция с приведением типа в указатель на родительский класс вместо базового.
(не исправлено MT5(build 2390)) ***   (new)   Compile Error, ошибка в приоритетах вызова перегруженных шаблонных функций..
(не исправлено MT5(build 2390)) **   (new)   Compile Error, при вызове функции для аргумента с типом данных color применяется implicit type conversation не смотря на то, что имеется подходящая по сигнатуре перегруженная шаблонная функция с типом данных color.
(не исправлено MT5(build 2390)) *    (new)   Compile Error, не смотря на явную специализацию при вызове перегруженной шаблонной функции все равно происходит вызов шаблонной функции по умолчанию, что приводит к переполнению стека..
(не исправлено MT5(build 2390)) *    (new)   Compile Error, ошибка компиляции при вызове функции через ее указатель, когда используется массив указателей на функцию.


Дефекты связанные с MetaEditor:
(не исправлено ME5(build 2390)) *** (new)   Debuger, срабатывание точки останова в статическом методе структуры вызывает зависание МТ терминала.
(не исправлено ME5(build 2390)) **  (new)   Compilation, описание ошибки компиляции не влазит в лимит 256 символов и обрезается, в результате невозможно понять для какого типа данных возникает ошибка, так как необходимая часть была обрезана.
(не исправлено ME5(build 2390)) **  (new)   Debuger, не работает StepInto (F11) и установленные breakpoints.
(не исправлено ME5(build 2390)) *   (new)   Debuger, после срабатывания breakpoint вместо продолжения выполнения кода при нажатии (F5), в действительности повторно срабатывает тот же breakpoint без выполнения какого-либо кода.
(не исправлено ME5(build 2390)) *   (new)   Compilation, некорректная сигнатура шаблонного параметра функции в Error Description и Parameter info.
(не исправлено ME5(build 2390)) *   (new)   MetaEditor, не работает функциональность Replace (Сtrl + H) для включенного "In selection" вместе с "Backward direction", когда выделен необходимый участок применения, а не весь код.


Дефекты связанные с медленным выполнением функций, работой оптимизатора кода:
(исправлено MT5(build 2390)) **   (up)      Runtime, большой overhead при добавлении по одному элементу в массив с помощью ArrayResize, не смотря на то, что память для них была заранее зарезервирована, например для структур аж до 7-ми раз медленнее.


Предложения:
             (new) - добавить в ME поиск/замену по текущему Project, а то при рефакторинге ходить по каждому из файлов и искать вхождение как-то не очень.
ссылка  (new) - в ME при компиляции заполнять пустые колонки File, Line, Column соответствующей информацией о файле источнике, из которого делался include.
ссылка - о внедрении поддержки intellisense для функциональности namespace на основе работы intellisense для статических методов в классах.
ссылка - о предоставлении возможности передавать литералы и временные переменные в виде const ref аргументов функции.
ссылка - при перемещении файлов проекта во вкладке "Project", для перемещаемых файлов, которые открыты и находятся во вкладках ME, автоматически обновлять их путь расположения.
ссылка - о необходимости введения в MQL typedef declaration функциональности.
ссылка - о предоставлении возможности принудительной генерации дефолтных конструкторов копирования и операторов присвоения.

 
Жаль, в ME при компиляции не видны пути подключаемых mqh, только названия.
 
При показе торговой истории в режиме "Ордера и Сделки" невозможно сортировать по столбцам. Из-за этого некоторые сделки, совершенные только что, попадают не в конец списка, а в середину.
 
fxsaber:

Простой пример. Нужно иметь массив МАшек с заданными периодами.

Каждая МАшка - объект одного типа. Понятно, МАшка однозначно задается периодом. Поэтому логично его сделать const.


ЗЫ В других языках делают просто массив указателей. В MQL такой свободы нет.

Нелогично. Если Вы не собираетесь её изменять, это ещё не значит, что нужно делать const. Достаточно сделать переменную закрытой.

Было бы логично, если бы Вы благодаря этому что-то получили. Но Вы только создали себе проблему.
Ошибки, баги, вопросы
Ошибки, баги, вопросы
  • 2020.04.21
  • www.mql5.com
Общее обсуждение: Ошибки, баги, вопросы
 
Sergey Dzyublik:

Вы знаете как устроен оптимизатор и компилятор MQL?
Откуда такая уверенность, что const поля простых типов не используется для этих целей?

Оптимизатор тут вообще не при чём.

Причина обращения: