如何重写CObject中的Compare(),使CList sort()工作? - 页 3 1234 新评论 Alain Verleyen 2017.09.04 14:16 #21 Gustavo Hennemann:你好@Alain Verleyen,我改变了getPrice()的方法,不再使用CopyClose(),而是使用CopyBuffer()。这并没有改变主要目标。因此,如果我在getPrice()方法中使用 "const "关键字,就会出现错误。"'CopyBuffer'--没有一个重载可以应用于该函数调用"。我认为这是因为CopyBuffer不是一个const方法,而且不可能在const方法中调用非const方法。 请展示你的最新代码。 Gustavo Hennemann 2017.09.08 17:38 #22 显然,我使用函数 Compare()中的运算符"&"来获得 "this "的值,解决了这个问题。int PriceScore::Compare(const CObject *node,const int mode=0) const { PriceScore *thisObject = (PriceScore*)&this; PriceScore *pc = (PriceScore*)node; Print(__FUNCTION__,":Compare called. Incoming: ", pc.Score()," This: ", score); if(pc.Score() < thisObject.getPrice()) return 1; else if(pc.Score() > thisObject.getPrice()) return -1; else return 0; }最后我得到了我所期望的值。 Doerk Hilger 2017.09.10 11:42 #23 你可以放弃thisObject,在比较中用 "this "代替它。但是,你为什么不使用 "operator "功能,而使用 "Compare "函数?使得以后的代码更容易阅读。 nicholish en 2017.09.10 17:47 #24 Doerk Hilger:你可以放弃thisObject,在比较中用 "this "代替它。但是,你为什么不使用 "operator "功能,而使用 "Compare "函数?使得以后的代码更容易阅读。因为它是基类CObject的一个多态方法,为了在Collection类、CArrayObj和CList中实现排序和搜索,它必须 被重写。 nicholish en 2017.09.10 17:49 #25 Gustavo Hennemann:显然,我在函数 Compare()中使用运算符"&"来获得 "this "的值,解决了这个问题。最后我得到了我所期望的值。我不知道你希望通过这种逻辑实现什么。通常情况下,你只想比较相同的元素来进行排序和搜索。... if(this.thingToSort > other.thingToSort) return 1; ... Gustavo Hennemann 2017.09.11 12:45 #26 nicholishen: 我不知道你希望通过这种逻辑实现什么。通常情况下,你希望只对相同的元素进行比较,以便进行排序和搜索。没错,现在是排序,之前我无法进行比较,我得到的是错误和错误,还有错误。现在可以工作了。这种方法并不明显,也不在任何文件中,我不得不做大量的测试和 "试验和错误",直到 得到这个结果。我希望其他人能享受这个解决方案。 Ex Ovo Omnia 2017.09.12 06:56 #27 Gustavo Hennemann:没错,现在它正在排序,之前我无法进行比较,我得到的是错误和错误和错误。现在它开始工作了。这种方法并不明显,也不在任何文件中,我不得不做大量的测试和 "试验和错误",直到 得到这个结果。我希望其他人可以享受这个解决方案。我只是好奇,为什么你需要在函数Compare() 中使用运算符"&"来获取 "this "的值?int PriceScore::Compare(const CObject *node,const int mode=0) const { /* PriceScore *thisObject = (PriceScore*)&this; */ PriceScore *pc = (PriceScore*)node; Print(__FUNCTION__,":Compare called. Incoming: ", pc.Score()," This: ", score); if(pc.Score() < /*thisObject.*/getPrice()) return 1; else if(pc.Score() > /*thisObject.*/getPrice()) return -1; else return 0; } nicholish en 2017.09.12 10:26 #28 Ex Ovo Omnia: 我只是好奇为什么你需要在函数Compare() 中使用运算符"&"来获取 "this "的值。 这等同于使用GetPointer(this)。 Ex Ovo Omnia 2017.09.12 10:54 #29 nicholishen: 这相当于使用GetPointer(this)那么,这并没有回答 "为什么 "的问题。没有理由把指针透露给自己。 nicholish en 2017.09.12 11:00 #30 Ex Ovo Omnia: 那么,这并没有回答 "为什么 "的问题。没有理由把指针透露给自己。 不,绝对不是在这个例子中,因为这是一个多余的提取,但是假设你把这个传递给一个只接受指针的方法,那么你就需要使用它...... method(&this) 1234 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
你好@Alain Verleyen,
我改变了getPrice()的方法,不再使用CopyClose(),而是使用CopyBuffer()。这并没有改变主要目标。
因此,如果我在getPrice()方法中使用 "const "关键字,就会出现错误。"'CopyBuffer'--没有一个重载可以应用于该函数调用"。我认为这是因为CopyBuffer不是一个const方法,而且不可能在const方法中调用非const方法。
显然,我使用函数 Compare()中的运算符"&"来获得 "this "的值,解决了这个问题。
最后我得到了我所期望的值。
你可以放弃thisObject,在比较中用 "this "代替它。
但是,你为什么不使用 "operator "功能,而使用 "Compare "函数?使得以后的代码更容易阅读。
你可以放弃thisObject,在比较中用 "this "代替它。
但是,你为什么不使用 "operator "功能,而使用 "Compare "函数?使得以后的代码更容易阅读。
因为它是基类CObject的一个多态方法,为了在Collection类、CArrayObj和CList中实现排序和搜索,它必须 被重写。
显然,我在函数 Compare()中使用运算符"&"来获得 "this "的值,解决了这个问题。
最后我得到了我所期望的值。
我不知道你希望通过这种逻辑实现什么。通常情况下,你只想比较相同的元素来进行排序和搜索。
我不知道你希望通过这种逻辑实现什么。通常情况下,你希望只对相同的元素进行比较,以便进行排序和搜索。
没错,现在是排序,之前我无法进行比较,我得到的是错误和错误,还有错误。现在可以工作了。
这种方法并不明显,也不在任何文件中,我不得不做大量的测试和 "试验和错误",直到 得到这个结果。我希望其他人能享受这个解决方案。
没错,现在它正在排序,之前我无法进行比较,我得到的是错误和错误和错误。现在它开始工作了。
这种方法并不明显,也不在任何文件中,我不得不做大量的测试和 "试验和错误",直到 得到这个结果。我希望其他人可以享受这个解决方案。
我只是好奇,为什么你需要在函数Compare() 中使用运算符"&"来获取 "this "的值?
我只是好奇为什么你需要在函数Compare() 中使用运算符"&"来获取 "this "的值。
这相当于使用GetPointer(this)
那么,这并没有回答 "为什么 "的问题。没有理由把指针透露给自己。
那么,这并没有回答 "为什么 "的问题。没有理由把指针透露给自己。