Опять проблемы с компилятором.

 

Есть функция. В ней закоментировано всё, кроме двух массивов:

string TFStringToIntenger (int    NumberIndicator,
                           int&   CurrentTF,
                           string StringTF,
                           bool&  ArBoolGlobalVariable[][],
                           int&   ArNumberTF[][],
                           int&   ArIntGlobalVariable[][])
{
// Массивы
  int    ArTF_Time[];
  string ArTF_Textb[];
}

Сама функция ни где не вызывается. Код самого советника более 20000 строк с учётом всех библиотек и инклюдов.

После компиляции получаю такие ошибки:

'[' - too many arrays E:\...\ZN_AIASM_EXP_Extern_Variable_In_Array.mq4 (33, 22)
'2' - comma or semicolon expected E:\...\ZN_AIASM_EXP_Extern_Variable_In_Array.mq4 (33, 23)
']' - unexpected square bracket E:\...\ZN_AIASM_EXP_Extern_Variable_In_Array.mq4 (33, 24)

...............здесь ещё 350 строк, как последняя...............................

Все эти ошибки ссылаются на место в коде неотносящееся к этой функции. Без этой функции всё компилируется и работает.

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

Также, можно закоментировать любой массив в параметрах функции, что приведёт к компиляции без ошибок.

=========

Эта функция в полном незакоментированном виде нормально компилируется в любом другом коде.

 

Похоже, Вы натолкнулись на ограничение на количество массивов в программе. Массивов не может быть больше 512. Мы ещё никогда не встречались с такой ситуацией.

 

Та уж...Интересное ограничение.

На глобальном уровне 69 массивов.

Надо везде посчитать? В библиотеках считать?

====================

Проверил. Библиотечные тоже входят в это ограничение.

Кошмар....:-( Что делать?

В MQL5 тоже такое ограничение?

 

Массив, объявленный параметром, тоже считается. Локальные массивы тоже считаются. Массивы в библиотеках считаются отдельно, в пределах каждой библиотеки.

в MQL5 таких ограничений нет

 
Zhunko >>:

Та уж...Интересное ограничение.

На глобальном уровне 69 массивов.

Надо везде посчитать? В библиотеках считать?

====================

Проверил. Библиотечные тоже входят в это ограничение.

Кошмар....:-( Что делать?

В MQL5 тоже такое ограничение?

Вадим !

по количеству массивов не налетал на ограничения, но и не возникало такой ситуации...

тут наверно разработчики могут пролить свет!

--

1 что делать вопрос сложный! может принцепом оверлея  работать!

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

Но если не ошибаюсь тебе этот метод не подойдет!

---

2 как то ограничится в количесте массивов

---

3 еще вариант уносить большой объем данных  из MQL во внешние приложения ( но это трудный и длинный  путь )

т е оставив только, скрипту только

1 сбор данных и отправку наверх

2 формирование запросов наверх

3 получение информации сверху

4 вход выход в позиции

5 отображения информации на графиках ( останется самым сложным местом )

хранилище данных можно делать в SQL...  mySQL или MSSQL или что то еще ( более бодрым и простым будет mySQL )

прослойку написать на DLL например Си++

расчеты все делать где снаружи на более сильном чем MQL языке например на том же Си++

Вадим я понимаю, это огромный пласт который требует изучения новых технологий

получения знаний SQL, T/SQL или PL/SQL

какого то языка к примеру Си++

---

>Массивов не может быть больше 512.

если ограничения языка не позволят, то никак

---

 
stringo >>:

в MQL5 таких ограничений нет

Хоть какое-то облегчение :-)

 
stringo >>:

Массив, объявленный параметром, тоже считается. Локальные массивы тоже считаются. Массивы в библиотеках считаются отдельно, в пределах каждой библиотеки.

в MQL5 таких ограничений нет

можно вопрос почти по теме?

из раздела Операции с массивами например ArrayMaximum в мкл5 только с одномерными будут работать?

а также из раздела Тех индикаторов типа iMAOnArray

приходица юзать промежуточный одномерный буфер например

for(shift=0; shift<15; shift++) Buffer[shift]=Сluster[band][shift];

Maxi=ArrayMaximum(Buffer);

 
sabluk >>:

можно вопрос почти по теме?

из раздела Операции с массивами например ArrayMaximum в мкл5 только с одномерными будут работать?

а также из раздела Тех индикаторов типа iMAOnArray

приходица юзать промежуточный одномерный буфер например

for(shift=0; shift<15; shift++) Buffer[shift]=Сluster[band][shift];

Maxi=ArrayMaximum(Buffer);


Это самому можно написать. Лишь бы ограничений не было.

 
Zhunko >>:

Русский MSDN и Русский Visual Studio 2008 вышли! 

---

http://www.microsoft.com/rus/news/issues/2008/10/visual.mspx

Среда Microsoft Visual Studio 2008 доступна на русском языке с 28 октября 2008 года. Приобрести профессиональные версии Visual Studio можно у партнеров Microsoft. Бесплатные версии Visual Studio доступны в центре для начинающих разработчиков. Загрузить пробные профессиональные версии. Online-библиотекa MSDN.

---


http://msdn.microsoft.com/ru-ru/aa700832.aspx

http://www.microsoft.com/express/ru/download/

http://msdn.microsoft.com/ru-ru/aa972637.aspx

http://msdn.microsoft.com/ru-ru/library/default.aspx

http://msdn.microsoft.com/ru-ru/vs2008/bb964355.aspx


---


Вадим я предполагаю ты уже давно скачал! бесплатный релиз VISUAL STUDIO 2008 на русском!

но если нет то вот он!

 
Да. Скачал давно. Но не ставил ещё.
 

Опять проблема :-(

Может не такая ужасная...

Почему-то не компилируются с первого раза советники. Вернее компилируются, но они становятся не активными в навигаторе. Только повторное компилирование делает их активными в навигаторе. Раньше в прежних билдах такого не наблюдалось.

Правда, иногда получается и с первого компилирования.