void ObjGet(CObj * o_Obj){ o_Obj = GetPointer(Obj); }
функция GetPointer не нужна. Obj - это итак готовый указатель. Нужно писать так:
void ObjGet( CObj*& o_Obj )
{
o_Obj = Obj;
}
Точно также по ссылке, Вы можете передавать любые аргументы: int&, float& и так далее.
// Данный пример свидетельствует, что получить объект по адресу из функции нельзя
Самоуверенность очень сильно мешает учиться.
В Вашем примере:
функция GetPointer не нужна. Obj - это итак готовый указатель. Нужно писать так:
Точно также по ссылке, Вы можете передавать любые аргументы: int&, float& и так далее.
Самоуверенность очень сильно мешает учиться.
Дело не в моей самоуверенности или чем то еще, а дело в том что объекты через параметры не передаются:
//+------------------------------------------------------------------+ //| получение_объекта_из_функции.mq5 | //| Copyright 2018, Cyberdev. | //+------------------------------------------------------------------+ #property copyright "Copyright 2018, Cyberdev." class CObj{ public: void InfoToLog(){ Print("Объект получен!"); } }; CObj * Obj = new CObj(); void ObjGet(CObj * o_Obj){ o_Obj = Obj; } //+------------------------------------------------------------------+ //| Script program start function | //+------------------------------------------------------------------+ void OnStart(){ CObj * Obj2 = NULL; ObjGet(Obj2); if(Obj2 != NULL){ Obj2.InfoToLog(); } else Print("Объект не был получен!"); // Данный пример свидетельствует, что получить объект по адресу из функции нельзя delete Obj; } //+------------------------------------------------------------------+В программе, где я столкнулся с этим было точно так же. Указатель на объект передавался напрямую, а не через GetPointer. Разницы абсолютно никакой.
Дело не в моей самоуверенности или чем то еще, а дело в том что объекты через параметры не передаются:
Дело как раз в этом. Объекты через параметры передаются!
И Вам бы лучше со мной не спорить, а внимательней посмотреть на функцию, которую я Вам привёл.
Дело как раз в этом. Объекты через параметры передаются!
И Вам бы лучше со мной не спорить, а внимательней посмотреть на функцию, которую я Вам привёл.
Да, действительно, работает. Просто, невнимательно прочитал Ваше сообщение. Спасибо!
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Собрался сделать передачу указателя на объект через параметр по адресу. Поскольку, обычные переменные по адресу можно свободно менять в теле функции, я подумал, что так же можно менять и указатель, передавая таким образом адрес объекта куда нужно. Но нет, такая возможность, как оказалось, отсутствует в MQL. Вот скрипт, который я написал в качестве примера, т.к. сама программа, где это обнаружилось, очень громоздкая.
Таким образом, всё еще раз подтвердилось.
Выход из данной ситуации конечно же есть. Нужно передавать объект в качестве результата функции. Но как быть, если нужно передать множество объектов из одной функции?