Здравствуйте!
поясните, пожалуйста, причину появления критической ошибки времени выполнения в случае, если присвоение выполняется без &
ИМХО. Тут ошибка компиляции должна быть. Модераторы, перенесите в тему с ошибками.
ИМХО. Тут ошибка компиляции должна быть. Модераторы, перенесите в тему с ошибками.
Надо сначала проверять, а потом писать. ИМХО в программировании не катит, все компилируется при раскомменчивании в Manager() .
Топикстартеру: посмотрите в дебаггере значение this в конструкторе Manager(). Вот так работает.
class Manager; class Employee; class Manager { public: Employee * meEmployee; Manager() { this.meEmployee=new Employee(); //this.meEmployee.meManager=&this; // ОК //this.meEmployee.meManager=this; // CRITICAL RUN TIME ERROR }; }; class Employee { public: Manager *meManager; }; void OnStart() { printf("start"); Manager lM(); lM.meEmployee.meManager = &lM; printf("Yes"); }
Надо сначала проверять, а потом писать. ИМХО в программировании не катит, все компилируется при раскомменчивании в Manager() .
Топикстартеру: посмотрите в дебаггере значение this в конструкторе Manager(). Вот так работает.
Алексей, то ли я ваш ответ не понял, то ли вы не поняли мой вопрос )
Я знаю, как сделать так, чтобы и компилировалось, и работало. От меня ускользает почему в строчке
this.meEmployee.meManager=&this;
обязательно должен присутствовать знак &. Почему без знака &, принимающая сторона - this.meEmployee.meManager не может получить указатель на объект this ?
если не затруднит, объясните, что в MQL значит:
& this
справка очень туманная по этому вопросу https://www.mql5.com/ru/docs/basis/types/this
Спасибо! Приму к сведению
если не затруднит, объясните, что в MQL значит:
справка очень туманная по этому вопросу https://www.mql5.com/ru/docs/basis/types/this
Это операция взятия адреса. То же самое что и функция GetPointer().
Это операция взятия адреса. То же самое что и функция GetPointer().
это я знаю
я физический смыл никак не пойму, по докам в MQL нет доступа к адресному пространству. указатели это идентификаторы и разыменование указателя отсутствует в MQL
это все понятно и стыкуется объяснениями из справки включая
this
но что значит ?
&this или GetPointer(this)
это я знаю
я физический смыл никак не пойму, по докам в MQL нет доступа к адресному пространству. указатели это идентификаторы и разыменование указателя отсутствует в MQL
это все понятно и стыкуется объяснениями из справки включая
но что значит ?
Просто в MQL это не физический адрес, а дескриптор.
Просто в MQL это не физический адрес, а дескриптор.
да дескриптор, не идентификатор как написал
но чем отличаются вызовы методов в этом коде ?
//+------------------------------------------------------------------+ class A { private: int value; public: A(): value(0) { } void setValue(const int v){value = v; } int getValue(void) {return value;} }; //+------------------------------------------------------------------+ void OnStart() { A *a = new A; a.setValue(123); A *b = a; A *c = GetPointer(a); Print("b = ",b.getValue()); // b = 123 Print("c = ",c.getValue()); // c = 123 delete a; delete b; delete c; } //+------------------------------------------------------------------+
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Здравствуйте!
поясните, пожалуйста, причину появления критической ошибки времени выполнения в случае, если присвоение выполняется без &