Скачать MetaTrader 5

Вопрос по передаче массивов в функцию?

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Olololo12345
16
Olololo12345  

Хочу написать функцию печати размерности массива.

void OnStart()

  {
   int mas1[];
   int mas2[][2];
  
  
   func( mas1 );
   func( mas2 );
 
  }
//+------------------------------------------------------------------+
 void func( int &arr[] )
     {
       Alert( ArrayDimension( arr )  );    
     }   


выдает ошибку: 'mas2' - invalid array access    Проверка 1.mq4    72    10

Вопрос можно ли в функцию одновременно передавать одномерные и многомерные массивы. Не могу понять?

Alexey Viktorov
11332
Alexey Viktorov  

Конечно можно. А что помешало проверить?

У тебя ошибка возникает из-за размерности массивов, mas2 двухмерный массив, а на входе в функцию одномерный.

Olololo12345
16
Olololo12345  
А как, не могу понять. Если можете тоже простой код как сделать, или в моем укажите что не так сделал. Заранее спасибо.
Alexey Viktorov
11332
Alexey Viktorov  
void OnStart()
  {
   int mas1[];
   int mas2[][2];
  
  
   func(mas1, mas2);
 
  }
//+------------------------------------------------------------------+
 void func( int &arr[], int &arr2[][])
     {
       Alert( ArrayDimension( arr )  );    
     }    

Код вставляй через кнопку SRC на панельке выше окна ввода.

Olololo12345
16
Olololo12345  
Понял что ругается на разные размерности. Но как сделать функцию которая будет получать массив любого размера и печатает его размерность? Никак не въеду. То есть надо писать только разные функции для разных размерностей, так что ли?
Alexey Viktorov
11332
Alexey Viktorov  

Может перегруженной функцией.

По сути будут разные функции, но вызываться будут одинаково.

Olololo12345
16
Olololo12345  

Спасибо. То есть я правильно понял, что размерность многомерного массива нужно указывать явно при передаче в функцию.

Я хотел сделать вот так изначально:

void OnStart()
  {
   int mas1[2]; 
   int mas2[][2];
   
   
   func( mas1 );
   func( mas2 );
  
  }
//+------------------------------------------------------------------+
 void func( int &arr[] )//здесь хотел указать что передаю массив(любой размер). То есть подаю массив разной размерности а в зависимости от размерности по разнму растягиваем.
     {
       if( ArrayDimension( arr )==1  )//а здесь в зависимости от размерности растягивать
         {
           ArrayResize( arr,2 );
         }
       if( ArrayDimension( arr)>1 )// и здесь по разному
         { 
          ArrayResize( arr,ArraySize( arr)+1);
         }        
     }  

Так не получится.

Alexey Viktorov
11332
Alexey Viktorov  
Не совсем так. Перегрузка это из ООП. Здесь почитай.
Olololo12345
16
Olololo12345  
Спасибо за помощь.
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий