MQL5中的OOP问题 - 页 14 1...789101112131415161718192021...96 新评论 Dmitry Fedoseev 2019.07.05 13:44 #131 TheXpert: 也是由版主保管的 谁说过关于监护权...但一个有两个古怪的人物... Vladimir Simakov 2019.07.05 13:44 #132 TheXpert: 也是在版主的指导下 我以为我删除了自己的帖子。 Dmitry Fedoseev 2019.07.05 13:48 #133 Vladimir Simakov: 我似乎已经删除了自己的帖子。 这是在一个函数中通过new创建一个对象时的情况。最初,我们谈论的是传递一个指向现有对象的指针。而在这里,可以像这样通过。 空白f(CObj * obj){}。 Vasiliy Sokolov 2019.07.05 13:55 #134 Dmitry Fedoseev: 而如果一个指针需要传递给一个函数,以便在该函数中创建一个对象,这就是它的作用。 class CObj{ public: int f(){ return(33); } }; CObj * obj; void OnStart(){ z(obj); delete(obj); } void z(CObj & o){ o = new CObj(); }这就是你想知道的关于OOP的一切,但却不敢问)) 这段代码为我踢出了终端。在最好的情况下,它在调试中会导致一个关键的错误(关于动画点击图片)。 奇怪的是,这样的结构会被编译器跳过。 Roman 2019.07.05 13:58 #135 伙计们,不要再自相残杀了,尤其是在公平竞争的环境下。 德米特里给出的第一个例子有一个错误,这有什么错呢? Dim,是的,它的编译没有错误,但当你运行脚本时,出现了一个错误。 Vladimir纠正了它,并添加了一个指针,代码正常工作。 我们还需要什么?现在我们必须找出谁是最酷的?)))) 伙计们,要相互尊重,不要以傲慢的态度诉诸于人格和侮辱。 迪米特里的最初例子 class CObj{ public: int f(){ return(33); } }; CObj * obj; void OnStart(){ z(obj); delete(obj); } void z(CObj & o){ //тут пропущен указатель o = new CObj(); } 弗拉基米尔的更正。 void z(CObj* &o){ //добавлен указатель o = new CObj(); } 我的更正与方法结果的打印,以验证 这个例子现在已经工作了,你还需要什么呢? 不要再试图找出谁更酷或不酷,每个人都有错别字和错误。 class CObj { public: int f(){return(33);} }; void z(CObj* &o) { o = new CObj(); Print(o.f()); } CObj * obj; //+------------------------------------------------------------------+ void OnStart() { z(obj); delete(obj); }在这些争论的过程中,我想我们已经发现了一个编译器错误。 为什么编译器跳过编译Dmitri的初始例子而没有错误? Vladimir Simakov 2019.07.05 13:58 #136 Vasiliy Sokolov: 这段代码为我踢出了终端。在最好的情况下,它会导致一个关键的 调试错误。 很奇怪,这样的结构会被编译器通过。 这里的一切对编译器都是有效的。 一个指向程序数据段中的对象的指针被创建,在编译过程中被0x0启动。 对处理器的必要命令是在代码段中创建的。 在运行时,命令在堆栈中的z(...)函数的地址处被提出。 并有移动rdx [0x0]。 而访问一个空的内存地址是被禁止的。对空指针的解除引用被称为 Vasiliy Sokolov 2019.07.05 14:00 #137 Vladimir Simakov: 这里的一切对编译器都是有效的。 对于哪个编译器? Dmitry Fedoseev 2019.07.05 14:03 #138 Vasiliy Sokolov: 这段代码为我踢出了终端。在最好的情况下,它在调试中会导致一个关键的错误(关于动画点击图片)。 奇怪的是,这样的结构会被编译器跳过。 我的编译,工作正常,但完成后显示内存泄漏(删除不工作)信息。 Vasiliy Pushkaryov 2019.07.05 14:06 #139 Igor Makanu: 你现在会教他坏的东西,需要处理的是好的东西))。 #define private protected 你的fxsaber代码不是白坐的。在我看来,这听起来像是一部杰作。 Vasiliy Pushkaryov 2019.07.05 14:19 #140 为错误的信息道歉,我之前写的是你不能在子类中调用Create()方法。 现在经过反复检查,可以了。但对私人成员m_button的访问是不可用的。例如,它不可能检查,例如,按钮的状态: 已按下/已释放。 现在有了伊戈尔的暗示,就有可能了。 #define private protected #include <Controls\Button.mqh> class CMyButton : public CButton { public: CMyButton(void){}; ~CMyButton(void){}; bool isPrevState; // состояние кнопки на предыд.тике, true - была нажата void setButton(); // создаем кнопку }; void CMyButton::setButton(void) { // метод Create() вызывается Create(0, "setBtn", 0, 50, 300, 150, 325); Text("setBtn"); m_button.State(); // работает когда включаем #define private protected } 1...789101112131415161718192021...96 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
也是由版主保管的
谁说过关于监护权...但一个有两个古怪的人物...
也是在版主的指导下
我似乎已经删除了自己的帖子。
这是在一个函数中通过new创建一个对象时的情况。最初,我们谈论的是传递一个指向现有对象的指针。而在这里,可以像这样通过。
空白f(CObj * obj){}。
而如果一个指针需要传递给一个函数,以便在该函数中创建一个对象,这就是它的作用。
这就是你想知道的关于OOP的一切,但却不敢问))这段代码为我踢出了终端。在最好的情况下,它在调试中会导致一个关键的错误(关于动画点击图片)。
奇怪的是,这样的结构会被编译器跳过。
德米特里给出的第一个例子有一个错误,这有什么错呢?
Dim,是的,它的编译没有错误,但当你运行脚本时,出现了一个错误。
Vladimir纠正了它,并添加了一个指针,代码正常工作。
我们还需要什么?现在我们必须找出谁是最酷的?))))
伙计们,要相互尊重,不要以傲慢的态度诉诸于人格和侮辱。
迪米特里的最初例子
弗拉基米尔的更正。
我的更正与方法结果的打印,以验证
这个例子现在已经工作了,你还需要什么呢?
不要再试图找出谁更酷或不酷,每个人都有错别字和错误。
在这些争论的过程中,我想我们已经发现了一个编译器错误。
为什么编译器跳过编译Dmitri的初始例子而没有错误?
这段代码为我踢出了终端。在最好的情况下,它会导致一个关键的 调试错误。
很奇怪,这样的结构会被编译器通过。
这里的一切对编译器都是有效的。
一个指向程序数据段中的对象的指针被创建,在编译过程中被0x0启动。
对处理器的必要命令是在代码段中创建的。
在运行时,命令在堆栈中的z(...)函数的地址处被提出。
并有移动rdx [0x0]。
而访问一个空的内存地址是被禁止的。对空指针的解除引用被称为
这里的一切对编译器都是有效的。
对于哪个编译器?
这段代码为我踢出了终端。在最好的情况下,它在调试中会导致一个关键的错误(关于动画点击图片)。
奇怪的是,这样的结构会被编译器跳过。
我的编译,工作正常,但完成后显示内存泄漏(删除不工作)信息。
你现在会教他坏的东西,需要处理的是好的东西))。
你的fxsaber代码不是白坐的。在我看来,这听起来像是一部杰作。
为错误的信息道歉,我之前写的是你不能在子类中调用Create()方法。
现在经过反复检查,可以了。但对私人成员m_button的访问是不可用的。例如,它不可能检查,例如,按钮的状态: 已按下/已释放。
现在有了伊戈尔的暗示,就有可能了。