错误、漏洞、问题 - 页 2359 1...235223532354235523562357235823592360236123622363236423652366...3184 新评论 Alexey Navoykov 2018.12.24 16:09 #23581 A100:我特别为你仔细检查了一下,考虑到 没关系的,DJ。你使用什么编译器? 我在VS 2010上。 二进制'=':没有找到接收'A'类型右侧操作数的运算符(或者没有可接受的转换)。 p.s. 我真的不明白 "考虑到 "是什么意思?这是关于将基类隐式复制到派生类中的可接受性。 A100 2018.12.24 16:23 #23582 在Visual Studio中,我的例子 也能工作。我指的是明确的复制操作符,并通过代码解释了它。 我写这个是为了以防万一,这样如果你禁用了明确的那个,你就不会同时意外地禁用它了 Alexey Navoykov 2018.12.24 16:37 #23583 A100:在Visual Studio中,我的例子 也能工作。我指的是明确的复制操作符,并通过代码解释了它。我指的不是显性运算符。 我说的是在这种情况下不允许隐性运算符,你称之为 "心胸狭窄",事实并非如此。 如果你需要进行复制,你必须先在C++中明确地将b投到正确的类型。因为这样的复制是对对象封装的一种违反。这就是为什么它不应该是关于暗示的。 Alexey Navoykov 2018.12.24 16:53 #23584 A100:我的意思是一个显式的复制操作符,并在代码中解释了它。 顺便说一下,如果类A也继承自某个类X,那么你的类B就不会受到保护,不会复制X(我们正在谈论MQL)。 你必须为所有的父类编写操作符。 Alexey Navoykov 2018.12.24 16:57 #23585 A100:我怀疑编译器将它们(在代码上下文中)分为显性和隐性。否则就很容易修复它 重点是隐式运算符总是与对象的类型相对应,即如果一个对象是B类型,它的隐式运算符是const B&类型,它不接受A类型,但这是C++。 Ilya Malev 2018.12.24 17:39 #23586 顺便说一下,操作者的类型似乎是确定的 首先它寻找运算符B::,如果它不存在,然后它寻找运算符A::,如果它也不存在,那么它认为它的职责已经完成,什么也不做(尽管指针因此而被破坏):) Alexey Navoykov 2018.12.24 17:58 #23587 Ilya Malev:如果它也不在那里,那么它就认为它的职责已经完成,什么也不做(尽管指针最终会被破坏) :)为什么它不做任何事情?它通过隐式(自动)operator=(const A&)进行复制,这是不应该做的。 最后把B后面的星号去掉,它伤害了你的眼睛)我们已经弄清了这个错误的一切。 Ilya Malev 2018.12.24 20:50 #23588 Alexey Navoykov:最后把B后面的星号拿掉,它很伤眼)它已经用这个错误想出了一切。我个人认为没有星号的对象变量令人不安 ))其中一个讨厌的bug是写A a=new A而不是*a,而且很长时间都不明白哪里出了问题)我则相反,表明如果你听从你的建议,声明一个私有的op.=&,一切都能正常工作。在这种情况下,编辑器会立即产生一个错误。从现在起我就这样做了 )) fxsaber 2018.12.25 12:44 #23589 花了几个小时寻找差异。发现这个#define PRINT(A) Print(#A + " = " + (string)(A)) void OnStart() { const double Koef = 0.25; const int iDelta = 32; const double point = 0.00001; const double high = 1.06736; const double low = 1.06676; const double Avg = (high + low) * 0.5; const double Size = (high - low) * Koef * 0.5; PRINT(DoubleToString(Avg - Size - point * iDelta, 5)); // DoubleToString(Avg-Size-point*iDelta,5) = 1.06666 PRINT(DoubleToString(Avg - (Size + point * iDelta), 5)); // DoubleToString(Avg-(Size+point*iDelta),5) = 1.06667 } 其特殊性双双知道,但不是这样的,如果你改变加法的顺序(除了相对 非常不同的数字),结果是不同的!"。请向一个傻瓜解释,为什么这里会发生这种情况? 你只需要看一下源头的底部两行。 Aliaksandr Hryshyn 2018.12.25 13:24 #23590 开发者的错误。 脚本不能编译,请查明原因))。使用所附文件。 同样的文件。 附加的文件: Test1.mq5 9 kb 1...235223532354235523562357235823592360236123622363236423652366...3184 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
我特别为你仔细检查了一下,考虑到
没关系的,DJ。
你使用什么编译器?
我在VS 2010上。
二进制'=':没有找到接收'A'类型右侧操作数的运算符(或者没有可接受的转换)。
p.s. 我真的不明白 "考虑到 "是什么意思?这是关于将基类隐式复制到派生类中的可接受性。
在Visual Studio中,我的例子 也能工作。我指的是明确的复制操作符,并通过代码解释了它。
我写这个是为了以防万一,这样如果你禁用了明确的那个,你就不会同时意外地禁用它了
在Visual Studio中,我的例子 也能工作。我指的是明确的复制操作符,并通过代码解释了它。
我指的不是显性运算符。 我说的是在这种情况下不允许隐性运算符,你称之为 "心胸狭窄",事实并非如此。
如果你需要进行复制,你必须先在C++中明确地将b投到正确的类型。因为这样的复制是对对象封装的一种违反。这就是为什么它不应该是关于暗示的。
我的意思是一个显式的复制操作符,并在代码中解释了它。
我怀疑编译器将它们(在代码上下文中)分为显性和隐性。否则就很容易修复它
顺便说一下,操作者的类型似乎是确定的
首先它寻找运算符B::,如果它不存在,然后它寻找运算符A::,如果它也不存在,那么它认为它的职责已经完成,什么也不做(尽管指针因此而被破坏):)
如果它也不在那里,那么它就认为它的职责已经完成,什么也不做(尽管指针最终会被破坏) :)
为什么它不做任何事情?它通过隐式(自动)operator=(const A&)进行复制,这是不应该做的。
最后把B后面的星号去掉,它伤害了你的眼睛)我们已经弄清了这个错误的一切。
最后把B后面的星号拿掉,它很伤眼)它已经用这个错误想出了一切。
我个人认为没有星号的对象变量令人不安 ))其中一个讨厌的bug是写A a=new A而不是*a,而且很长时间都不明白哪里出了问题)我则相反,表明如果你听从你的建议,声明一个私有的op.=&,一切都能正常工作。在这种情况下,编辑器会立即产生一个错误。从现在起我就这样做了 ))
其特殊性双双知道,但不是这样的,如果你改变加法的顺序(除了相对 非常不同的数字),结果是不同的!"。请向一个傻瓜解释,为什么这里会发生这种情况?
你只需要看一下源头的底部两行。
开发者的错误。
脚本不能编译,请查明原因))。使用所附文件。
同样的文件。