Хотя, на C++ этот код нормально компилируется и работает.
Возможно ли на Mql4 количество элементов задать из переменной? Или всегда нужно использовать только числа?
Не выдержал и запустил VS 2015, думаю, неужели в новых версиях С++ ввели такие разрешения?? Как и ожидалось, такое объявление массива запрещено. Вы каким компилятором C++ пользуетесь? Я проверял на VS 2015 update 3. Номера строк 7 и 12 пронумеровал.
int size = 10;
7bool 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
Не выдержал и запустил 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;
}
Что-то вы не то говорите. Если компилятор и допускает переменную в качестве размера массива, то он хотя бы должен проверить её тип, чтобы она была целочисленной и беззнаковой, не?
Т.е. этот нормальный компилятор вот это пропустит? Вы, как я понял, им пользуетесь? Как отработает прога, если введёте с консоли минус 5?
Что-то вы не то говорите. Если объявление массива и допускает переменную в качестве размера, то компилятор хотя бы должен проверить её тип, чтобы она была целочисленной и беззнаковой, не?
Отрицательный размер массива - это нормально (для меня): задается абсолютная целочисленная величина. А отрицательный индекс - это как отрицательный остаток в математике (по модулю размера массива). Т.е. он имеет всегда положительный аналог, укладывающийся в привычное представление работы с массивом.
Вот что есть
А MQL4 разве это поддерживает? Это же ООП.
Загляните в папку Include.
А MQL4 разве это поддерживает? Это же ООП.
MQL4 как язык с некоторых пор ничем не отличается от MQL5. Отличаются только API.
аналога 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
А MQL4 разве это поддерживает? Это же ООП.
Почему-то, при объявлении массива следующим образом:
Появляется ошибка: '[' - invalid index value
Хотя, на C++ этот код нормально компилируется и работает.
Возможно ли на Mql4 количество элементов задать из переменной? Или всегда нужно использовать только числа?
Не выдержал и запустил VS 2015, думаю, неужели в новых версиях С++ ввели такие разрешения?? Как и ожидалось, такое объявление массива запрещено. Вы каким компилятором C++ пользуетесь? Я проверял на VS 2015 update 3. Номера строк 7 и 12 пронумеровал.
Не выдержал и запустил VS 2015, думаю, неужели в новых версиях С++ ввели такие разрешения?? Как и ожидалось, такое объявление массива запрещено. Вы каким компилятором C++ пользуетесь? Я проверял на VS 2015 update 3. Номера строк 7 и 12 пронумеровал.
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 тоже без проблем проглатывает подобное:
Пользуйтесь нормальными компиляторами )). GCC это умеет в качестве расширения.
Т.е. этот нормальный компилятор вот это пропустит? Вы, как я понял, им пользуетесь? Как отработает эта прога, если введёте с консоли минус 5?
Что-то вы не то говорите. Если компилятор и допускает переменную в качестве размера массива, то он хотя бы должен проверить её тип, чтобы она была целочисленной и беззнаковой, не?Т.е. этот нормальный компилятор вот это пропустит? Вы, как я понял, им пользуетесь? Как отработает прога, если введёте с консоли минус 5?
Что-то вы не то говорите. Если объявление массива и допускает переменную в качестве размера, то компилятор хотя бы должен проверить её тип, чтобы она была целочисленной и беззнаковой, не?