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();
}
если весь массив
если один из его элементов
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]);
![MQL5 - Язык торговых стратегий для клиентского терминала MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Уже не первый день думаю над тем, как переписать некоторые вещи. Вот имеется массив структур, объявленный так в хедере:
Position_Properties SPos[100];
и заполняется вот так:
Хочу есс-но понять как передавать данную структуру в какую-нить функцию. Если массив передаётся по имени массива, то тут так же?
Например, была такая функцию:
Я так понимаю, после передачи данного массива структур эта функция будет выглядеть так, верно?