Буффер индикатора

 

Здравствуйте, есть код,

#define NUM 3

double Buffer[NUM][];

int OnInit()

{

for(int i=0; i<NUM; i++) SetIndexBuffer(i,Buffer[i],INDICATOR_DATA);

return(INIT_SUCCEEDED);

}

 Ошибки:

'[' - invalid index value Test.mq5 2 19

'Buffer' - invalid array access Test.mq5 5 44

'Buffer' - parameter conversion not allowed Test.mq5 5 44

 Идея понятна из кода: объявляется количество буфферов для индикатора, на инициализации выполняется цикл присваивания каждого массива к буфферу. Мне нужно именно такое реализование буфферов. Что я делаю не так?

 
Заверните массивы в класс или структуру, тогда все получится
 
TheXpert:
Заверните массивы в класс или структуру, тогда все получится

Очень мало работал с классами и структурами. Можете объяснить на примерах со структурой?

 
AshFTW:

Очень мало работал с классами и структурами. Можете объяснить на примерах со структурой?

struct tagBuf
{
  double data[];
}

tagBuf line[NUM];

int OnInit()
{
  for(int i=0; i<NUM; i++) SetIndexBuffer(i, line[i].data, INDICATOR_DATA);
  return(INIT_SUCCEEDED);
}
 

Я бы сделал отдельно три буффера. Как я понимаю, нельзя создать многомерный массив (у вас двумерный), в котором первое измерение - задано, а второе - динамическое.

Кроме того, у вас и присвоение в цикле идет почему-то уже одномерному массиву, а не объявленному двумерному.

 

sergeev, огромное спасибо, всё оказалось изи.

Laryx:

Я бы сделал отдельно три буффера.

 Я бы тоже сделал, но у меня индюк так задуман. Да, вы всё правильно поняли, причину не могу понять. Я бы мог использовать switch, но решил написать на форум. Присвоение в цикле правильное, там нужно указать именно первый массив второмерного массива, во втором данные индикатора.

 
AshFTW:
 

Присвоение в цикле правильное, там нужно указать именно первый массив второмерного массива, во втором данные индикатора.

Думаю, что такое обращение с многомерным массивом, как у вас - не позволит компилятор.

Выше - предложено верно, обернуть внутренний элемент в структуру.

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