Как передавать-получать массивы структур?

 

Уже не первый день думаю над тем, как переписать некоторые вещи. Вот имеется массив структур, объявленный так в хедере:

Position_Properties  SPos[100];

 и заполняется вот так:

for (int i = OrdersTotal() - 1; i >= 0; i--)
   {
      SPos[i].iType = OrderType();
      SPos[i].iCurTicket = OrderTicket();
      SPos[i].dOpenPrice = OrderOpenPrice();
      SPos[i].dLots = OrderLots();
      SPos[i].dCurSL = OrderStopLoss();
      SPos[i].dCurTP = OrderTakeProfit();
      SPos[i].sComment = OrderComment();
   }

 Хочу есс-но понять как передавать данную структуру в какую-нить функцию. Если массив передаётся по имени массива, то тут так же?

Например, была такая функцию:

CheckDemandsForStopLevel (int fi_Mode, string  fs_Symbol, int fi_Type, double  &fd_NewOpenPrice, double  &fd_NewSL, double  &fd_NewTP, bool    &fb_FixInvalidPrice)

 Я так понимаю, после передачи данного массива структур эта функция будет выглядеть так, верно?

CheckDemandsForStopLevel (Position_Properties  MyPos,//... другие параметры)
{
   // Получаем значения свойств переданной структуры так?
   MyPos[i].iType = OrderType();
   MyPosPos[i].iCurTicket = OrderTicket();
   MyPosPos[i].dOpenPrice = OrderOpenPrice();
   MyPosPos[i].dLots = OrderLots();
   MyPosPos[i].dCurSL = OrderStopLoss();
   MyPosPos[i].dCurTP = OrderTakeProfit();
   MyPosPos[i].sComment = OrderComment();
}
 
CheckDemandsForStopLevel (Position_Properties  &MyPos[],//... другие параметры)

если весь массив

если один из его элементов 

 CheckDemandsForStopLevel (Position_Properties  MyPos,//... другие параметры)

{
   // Получаем значения свойств переданной структуры так?
   MyPos.iType = OrderType();
   MyPos.iCurTicket = OrderTicket();
   MyPos.dOpenPrice = OrderOpenPrice();
   MyPos.dLots = OrderLots();
   MyPos.dCurSL = OrderStopLoss();
   MyPos.dCurTP = OrderTakeProfit();
   MyPos.sComment = OrderComment();
}
 
FAQ:

если весь массив

если один из его элементов 

 CheckDemandsForStopLevel (Position_Properties  MyPos,//... другие параметры)

По ссылке то передаётся всё замечательно. Имею ввиду передачу массива структур. А вот если передать один из элементов, то не выходит. Всё-равно в даже если структуру одну, а не массив передавать нужно по ссылке( по крайне мере, компилятор ругается, если без ссылки пытаться передавать). Так вот пробую так:

Position_Properties SPos[100];
//---

//+------------------------------------------------------------------+
//| Вывод значений структуры                                           |
//+------------------------------------------------------------------+
void ReturnValueOfArray (Position_Properties& MyPos)
{
   for (int i = 5; i >= 0; i--)
   {
/*      Print ("MyPos[", i, "].iType = ", SPos[i].iType);
      WriteLog (StringConcatenate("MyPos[", i, "].iType = ",  IntegerToString (SPos[i].iType)));
      WriteLog (StringConcatenate("MyPos[", i, "].dCurSL = ", MyPos[i].dCurSL));
      WriteLog (StringConcatenate("MyPos[", i, "].iType = ", SPos[i].iType));
      WriteLog (StringConcatenate("MyPos[", i, "].iCurTicket = ", SPos[i].iCurTicket));
      WriteLog (StringConcatenate("MyPos[", i, "].dOpenPrice = ", SPos[i].dOpenPrice));
      WriteLog (StringConcatenate("MyPos[", i, "].dLots = ", SPos[i].dLots));
      WriteLog (StringConcatenate("MyPos[", i, "].dCurSL = ", *DoubleToStr (SPos[i].dCurSL)));
      WriteLog (StringConcatenate("MyPos[", i, "].sComment = ", SPos[i].sComment));
*/   }
}
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
{
   for (int i = 5; i >= 0; i--)
  {
      SPos[i].iType = 6;
      SPos[i].iCurTicket = 5;
      SPos[i].dOpenPrice = 1.25;
      SPos[i].dLots = 0.01;
      SPos[i].dCurSL = 1.24;
      SPos[i].dCurTP = 1.26;
      SPos[i].sComment = "dDSDS";
      
      ReturnValueOfArray (SPos);
   }
}

 Компилятор так ругается:

'SPos' - parameter conversion not allowed       Expertsqsdfsdgfh.mq4    92      27

 Как его тогда передать? И, самое главное, как к нему обратится внутри функции, в которую я её передам?

 

вот тут вы передаете весь массив :

ReturnValueOfArray (SPos);

а  здесь принимаете один его элемент (структуру) :

void ReturnValueOfArray (Position_Properties& MyPos)

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

void ReturnValueOfArray (Position_Properties &MyPos[])

или отправляйте только один его элемент :

 ReturnValueOfArray (SPos[i]);

 

 
в общем или крест снимите, или трусы оденьте... )))
Причина обращения: