Объявление массива на языке MQL4 - не получается задать количество элементов, передавая значение переменной (и даже константы). - страница 2

 
Dmitry Fedoseev:
Вот что есть
А MQL4 разве это поддерживает? Это же ООП.
 
BlackTomcat:
А MQL4 разве это поддерживает? Это же ООП.

Загляните в папку Include.

 
BlackTomcat:
А MQL4 разве это поддерживает? Это же ООП.
MQL4 как язык с некоторых пор ничем не отличается от MQL5. Отличаются только API.
 
Stanislav Korotky:
MQL4 как язык с некоторых пор ничем не отличается от MQL5. Отличаются только API.
Понятно. Я последний раз на MQL4 писал в 2012-м году, потом начал на MT5 и MQL5 переходить. Много чего изменилось за это время, получается.
 
Maxim Kuznetsov:

аналога STL нет. MT заточен на работу с массивами (таймсериями), что естественно - старайтесь реализовывать свои алгоритмы на них.

то есть свой аналог std::list std::map можно наваять но это не из области прикладного программирования..

Да вы что? Все есть, с похожим функционалом, смотрим в папку Includes\Arrays, вот его содержимое. Конечно, скромненько, но кое-что есть.

Array.mqh

ArrayChar.mqh

ArrayDouble.mqh

ArrayFloat.mqh

ArrayInt.mqh

ArrayLong.mqh

ArrayObj.mqh

ArrayShort.mqh

ArrayString.mqh

dictionary.mqh

List.mqh

Tree.mqh

TreeNode.mqh 

 
BlackTomcat:
А MQL4 разве это поддерживает? Это же ООП.
Уже с 2013 года ООП поддерживается ))
 
Alexander Nikolaev:

Почему-то, при объявлении массива следующим образом: 

Появляется ошибка: '[' - invalid index value

Хотя, на C++ этот код нормально компилируется и работает.

Возможно ли на Mql4 количество элементов задать из переменной? Или всегда нужно использовать только числа? 

Не выдержал и запустил VS 2015, думаю, неужели в новых версиях С++ ввели такие разрешения?? Как и ожидалось, такое объявление массива запрещено. Вы каким компилятором C++ пользуетесь? Я проверял на VS 2015 update 3. Номера строк 7 и 12 пронумеровал.

    int size = 10;
7   bool mass[size];


int main()
{
12  mass[2] = 123; 
    return mass[2];
}

Severity        Code    Description     Project File    Line    Suppression State
Error (active)          expression must have a constant value   ConsoleApplication1     c:\MyP\AvForex\trunk\AvRobot\ConsoleApplication1\ConsoleApplication1\ConsoleApplication1.cpp    7       
Error   C2131   expression did not evaluate to a constant       ConsoleApplication1     c:\myp\avforex\trunk\avrobot\consoleapplication1\consoleapplication1\consoleapplication1.cpp    7       
Error   C3863   array type 'bool [size]' is not assignable      ConsoleApplication1     c:\myp\avforex\trunk\avrobot\consoleapplication1\consoleapplication1\consoleapplication1.cpp    12      
 
Alexey Volchanskiy:

Не выдержал и запустил VS 2015, думаю, неужели в новых версиях С++ ввели такие разрешения?? Как и ожидалось, такое объявление массива запрещено. Вы каким компилятором C++ пользуетесь? Я проверял на VS 2015 update 3. Номера строк 7 и 12 пронумеровал.

Пользуйтесь нормальными компиляторами )). GCC это умеет в качестве расширения. Вообще, Variable-length arrays давно есть в Си, их собирались ввести в С++14, но что-то не ввели. Ребята из gcc об (VLAs) так говорят:

This feature was briefly part of the C++14 working paper, but was not part of the published standard; as a result, it has been removed from the compiler.

ЗЫ:

clang тоже без проблем проглатывает подобное:

int main(int c, char **p)
{
  int a[**p];
  a[0] = 3;
}
 
pavlick_:
Пользуйтесь нормальными компиляторами )). GCC это умеет в качестве расширения.

Т.е. этот нормальный компилятор вот это пропустит? Вы, как я понял, им пользуетесь? Как отработает эта прога, если введёте с консоли минус 5?

#include <iostream>

int main()
{
   int a = 0;

   std::cout << "Input array size: ";
   std::cin >> a;

   int arr[a];
   arr[0] = 0;
}
Что-то вы не то говорите. Если компилятор и допускает переменную в качестве размера массива, то он хотя бы должен проверить её тип, чтобы она была целочисленной и беззнаковой, не?
 
Sergei Vladimirov:

Т.е. этот нормальный компилятор вот это пропустит? Вы, как я понял, им пользуетесь? Как отработает прога, если введёте с консоли минус 5?

Что-то вы не то говорите. Если объявление массива и допускает переменную в качестве размера, то компилятор хотя бы должен проверить её тип, чтобы она была целочисленной и беззнаковой, не?
Отрицательный размер массива - это нормально (для меня): задается абсолютная целочисленная величина. А отрицательный индекс - это как отрицательный остаток в математике (по модулю размера массива). Т.е. он имеет всегда положительный аналог, укладывающийся в привычное представление работы с массивом.
Причина обращения: