Создание массива

 

Создаю массив, к примеру на 5 текстовых элементов:

---start---

string Testarra[5];

---finish---

Этот вариант прекрасно работает.

Создаю массив по другому варианту:

---start---

string Testcont="5";

string Testarra[Testcont];

---finish---

получаю ругань: 'Testcont' - integer number expected...

Та же ерунда, если

---start---

int Testcont=5;

string Testarra[Testcont];

---finish---

Вопрос к знатокам - как сделать массив через переменную?

 

Я не знаток, но индексом массива должно быть целое (integer) а у Вас в 1-м случае переменная Testcont объявлена как string, во 2-м цифра 5 стоит в кавычках.

Почитайте здесь.

 
int Testcont=5;
string Testarra[Testcont];
 
banderass писал(а) >>

Очепятка (на форуме). Исправил.

А string пытался объявить от безисходности...

Естеств. int без кавычек. Но тоже не работает

Вот тут похожий вопрос: 'Объявление массива'

... и решение:

---

int n=10;
int Massiv[];


void init() {
ArrayResize(Massiv,n);
return;
}
---

Но, извините, это через задницу...

 
Chippolino >>:

Создаю массив, к примеру на 5 текстовых элементов:

Если объявляете массив из 5-ти string элементов, то так:

string Tastarra[5];

А обращаться к элементу массива по его индексу, который м.б. задан через целочисленную переменную.

 
goldtrader писал(а) >>

Если объявляете массив из 5-ти string элементов, то так:

А обращаться к элементу массива по его индексу, который м.б. задан через целочисленную переменную.

Такой вариант не оптимален. А если массив в 10000 элементов? Да ещё работаем с таким массивом (ну, там, минимальное или максимальное смотрим). Да ещё не по разу за "тик"... Это ж сколько процессорного времени уйдёт вхолостую...

В принципе, вопрос стоял чисто по правильности написания команды. Но, видимо, в mql4 данная опция отсутствует. :(

 
Chippolino писал(а) >>

Создаю массив, к примеру на 5 текстовых элементов:

---start---

string Testarra[5];

---finish---

Этот вариант прекрасно работает.

Создаю массив по другому варианту:

---start---

string Testcont="5";

string Testarra[Testcont];

---finish---

получаю ругань: 'Testcont' - integer number expected...

Та же ерунда, если

---start---

int Testcont=5;

string Testarra[Testcont];

---finish---

Вопрос к знатокам - как сделать массив через переменную?

Объявить константу:

#define ZZZ 5;

и можно будет так объявить массив:

string Testarra[ZZZ];

 
При первичном создании массива д.б. явно указано количество элементов в массиве. При последующей работе с массивом применяется ArrayResize(Massiv,n) для изменении размера массива. Теоретически вариант (1) ArrayResize(Massiv,n) ничем не отличается от (2) Testarra[Testcont] в плане нагрузки на процесор. Понятно, что вариант (2) проще выглядит. Просто необходимо смириться с тем, что писать код необходимо по правилам, определенным разработчиками языка (mql4), а не так, как нам кажется проще. Мы же прекрасно понимаем, что при общении с иностранцами необходимо говорить на их языке. И стараемся выучить язык. Так и здесь.
Причина обращения: