CObjectでCompare()をオーバーライドして、CList sort()を動作させるには? - ページ 4 1234 新しいコメント Gustavo Hennemann 2017.09.12 16:41 #31 Ex Ovo Omnia: 関数 Compare() で "this" の値を取得 するのに、なぜ演算子 "&" が 必要だったのでしょうか?なぜなら、Compare() メソッドは "const" であり、その内部で非 "const" メソッドを呼び出すことはできないからです。この例では、2ページのコードを参照してください、メソッドgetPrice()はconstではなく、その中の関数 CopyClose()もconstではありません。すべてのメソッドは "const "に変換できますが、CopyClose()は変換できません。いずれにせよ、演算子"&"はconstでないメソッドにアクセスできるので、constメソッドの 内部で呼び出すことができる。 Ex Ovo Omnia 2017.09.12 19:03 #32 Gustavo Hennemann:なぜなら、Compare() メソッドは "const" であり、その内部で非 "const" メソッドを呼び出すことはできないからです。この例では、2ページのコードを参照してください、メソッドgetPrice()はconstではなく、その内部にある関数 CopyClose()もconstではありません。すべてのメソッドは "const "に変更することができますが、CopyClose()はできません。とにかく、演算子"&"はconstでないメソッドにアクセスできるので、"const "メソ ッドの内部で呼び出すことができる。今わかった。私はそれが有効な構造であるかどうか、全く分かりませんが、おそらくあなたは知っているでしょう。私としては、MQLではJavaのように「const」メソッド宣言を完全に避けた方がいいと思います。 nicholish en 2017.09.12 19:15 #33 Ex Ovo Omnia: なるほどね。私はそれが有効な構造であるかどうか見当もつきませんが、おそらくあなたはご存知でしょう。私としては、MQLではJavaのように「const」メソッド宣言を完全に避けた方が良いと思います。標準ライブラリのコレクション・クラス(検索、ソートなど)の(非常に便利な)メソッドを利用するためには、CObjectのCompareメソッドをオーバーライド する必要があります。これは、Compareメソッド内から呼び出されるすべてのメソッドが、constメソッド でなければならないことを意味します。OPはこの詳細を回避したのではなく、「this」 ポインタを正しく使用しなかっただけなのです。つまり、OPは単にthis.DoSomething()を呼び出すのではなく、(self)オブジェクトへの自分自身のポインタを作成しました。 Ex Ovo Omnia 2017.09.12 19:24 #34 nicholishen: stdライブラリのコレクションクラス(検索、ソートなど)の(非常に便利な)メソッドを利用するには、CObjectのCompareメソッドをオーバーライド する必要があります。これは、Compareメソッド内から呼び出されるすべてのメソッドが、constメソッド でなければならないことを意味します。OPはこの詳細を回避したわけではなく、this ポインタを正しく使用しなかっただけです。つまり、OPはthis.DoSomething()を呼び出す代わりに、単にthisキーワードを使用するのではなく、(self)オブジェクトへの自分自身のポインタを作成しました。彼のやったことは理解できますが、問題は、この構造が(一般的に)無害かどうかということです。コンパイラは、オブジェクトが const 関数でそのメンバを変更することを想定していません。 Gustavo Hennemann 2017.09.12 19:55 #35 Ex Ovo Omnia: 問題は、この構文が(一般に)無害かどうかということです。コンパイラは、オブジェクトがconst関数内でそのメンバを変更することを想定していません。このケースでは、私は値を取得するだけで、何も変更していません。しかし、もしconst値を変更しようとすると、おそらくコンパイラはこの問題について警告を出すでしょうし、最悪の場合、実行時例外が発生するでしょう。 nicholish en 2017.09.14 00:52 #36 Ex Ovo Omnia: 問題は、この構文が(一般に)無害かどうかということです。コンパイラは、オブジェクトがconst関数内でメンバを変更することを想定していません。ああ......。今わかりました、失礼しました。それは潜在的に危険かもしれませんね。OPはCompare()の視野内にあるすべてのメソッドもconst メソッドであることを確認する必要があります。 Alain Verleyen 2017.09.20 12:50 #37 Gustavo Hennemann:こんにちは、@Alain Verleyen です。私はgetPrice()メソッドを変更し、CopyClose()を使用する代わりに、CopyBuffer()を使用しています。これは、主目的を変更するものではありません。そのため、getPrice()メソッドで "const "キーワードを使用すると、エラーが発生します。"'CopyBuffer' - no one of the overloads can be applied to the function call"というエラーが発生します。これは、CopyBufferがconstメソッドではなく、constメソッド内で非constメソッドを呼び出すことができないために発生すると思われます。返信が遅くなり申し訳ありません。CopyBuffer()を使用する際に、なぜgetPrice()をconstとして宣言しなかったのか、まだわかりません。このような場合、getPrice()を更新したバージョンを投稿してもらえますか? MOHAMMED SAFAR AL-OTAIBI 2017.10.16 18:19 #38 最新情報 1234 新しいコメント 取引の機会を逃しています。 無料取引アプリ 8千を超えるシグナルをコピー 金融ニュースで金融マーケットを探索 新規登録 ログイン スペースを含まないラテン文字 このメールにパスワードが送信されます エラーが発生しました Googleでログイン WebサイトポリシーおよびMQL5.COM利用規約に同意します。 新規登録 MQL5.com WebサイトへのログインにCookieの使用を許可します。 ログインするには、ブラウザで必要な設定を有効にしてください。 ログイン/パスワードをお忘れですか? Googleでログイン
関数 Compare() で "this" の値を取得 するのに、なぜ演算子 "&" が 必要だったのでしょうか?
なぜなら、Compare() メソッドは "const" であり、その内部で非 "const" メソッドを呼び出すことはできないからです。
この例では、2ページのコードを参照してください、メソッドgetPrice()はconstではなく、その中の関数 CopyClose()もconstではありません。すべてのメソッドは "const "に変換できますが、CopyClose()は変換できません。
いずれにせよ、演算子"&"はconstでないメソッドにアクセスできるので、constメソッドの 内部で呼び出すことができる。
なぜなら、Compare() メソッドは "const" であり、その内部で非 "const" メソッドを呼び出すことはできないからです。
この例では、2ページのコードを参照してください、メソッドgetPrice()はconstではなく、その内部にある関数 CopyClose()もconstではありません。すべてのメソッドは "const "に変更することができますが、CopyClose()はできません。
とにかく、演算子"&"はconstでないメソッドにアクセスできるので、"const "メソ ッドの内部で呼び出すことができる。
今わかった。私はそれが有効な構造であるかどうか、全く分かりませんが、おそらくあなたは知っているでしょう。私としては、MQLではJavaのように「const」メソッド宣言を完全に避けた方がいいと思います。
なるほどね。私はそれが有効な構造であるかどうか見当もつきませんが、おそらくあなたはご存知でしょう。私としては、MQLではJavaのように「const」メソッド宣言を完全に避けた方が良いと思います。
標準ライブラリのコレクション・クラス(検索、ソートなど)の(非常に便利な)メソッドを利用するためには、CObjectのCompareメソッドをオーバーライド する必要があります。これは、Compareメソッド内から呼び出されるすべてのメソッドが、constメソッド でなければならないことを意味します。OPはこの詳細を回避したのではなく、「this」 ポインタを正しく使用しなかっただけなのです。つまり、OPは単にthis.DoSomething()を呼び出すのではなく、(self)オブジェクトへの自分自身のポインタを作成しました。
stdライブラリのコレクションクラス(検索、ソートなど)の(非常に便利な)メソッドを利用するには、CObjectのCompareメソッドをオーバーライド する必要があります。これは、Compareメソッド内から呼び出されるすべてのメソッドが、constメソッド でなければならないことを意味します。OPはこの詳細を回避したわけではなく、this ポインタを正しく使用しなかっただけです。つまり、OPはthis.DoSomething()を呼び出す代わりに、単にthisキーワードを使用するのではなく、(self)オブジェクトへの自分自身のポインタを作成しました。
彼のやったことは理解できますが、問題は、この構造が(一般的に)無害かどうかということです。コンパイラは、オブジェクトが const 関数でそのメンバを変更することを想定していません。
問題は、この構文が(一般に)無害かどうかということです。コンパイラは、オブジェクトがconst関数内でそのメンバを変更することを想定していません。
このケースでは、私は値を取得するだけで、何も変更していません。しかし、もしconst値を変更しようとすると、おそらくコンパイラはこの問題について警告を出すでしょうし、最悪の場合、実行時例外が発生するでしょう。
問題は、この構文が(一般に)無害かどうかということです。コンパイラは、オブジェクトがconst関数内でメンバを変更することを想定していません。
ああ......。今わかりました、失礼しました。それは潜在的に危険かもしれませんね。OPはCompare()の視野内にあるすべてのメソッドもconst メソッドであることを確認する必要があります。
こんにちは、@Alain Verleyen です。
私はgetPrice()メソッドを変更し、CopyClose()を使用する代わりに、CopyBuffer()を使用しています。これは、主目的を変更するものではありません。
そのため、getPrice()メソッドで "const "キーワードを使用すると、エラーが発生します。"'CopyBuffer' - no one of the overloads can be applied to the function call"というエラーが発生します。これは、CopyBufferがconstメソッドではなく、constメソッド内で非constメソッドを呼び出すことができないために発生すると思われます。
返信が遅くなり申し訳ありません。
CopyBuffer()を使用する際に、なぜgetPrice()をconstとして宣言しなかったのか、まだわかりません。このような場合、getPrice()を更新したバージョンを投稿してもらえますか?
最新情報