Скачать MetaTrader 5
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Знаете ли вы, что в MQL5 появились классы?
Olololo12345
16
Olololo12345 2016.04.19 05:30 

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

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
5545
Alexey Viktorov 2016.04.19 05:54  

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

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

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

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

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

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

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

Olololo12345
16
Olololo12345 2016.04.19 06:23  

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

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

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
5545
Alexey Viktorov 2016.04.19 06:37  
Не совсем так. Перегрузка это из ООП. Здесь почитай.
Olololo12345
16
Olololo12345 2016.04.19 06:37  
Спасибо за помощь.
/
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий