エラー、バグ、質問 - ページ 1182 1...117511761177117811791180118111821183118411851186118711881189...3185 新しいコメント Stanislav Korotky 2014.08.05 20:29 #11811 Zeleniy:最適化がうまくいっていない。2014.08.05 19:34:42 Tester no optimized parameter selected, please check input(s) to be optimized and set carefully start, step and stop values.翻訳では何も出なかった。"何もない "とはどういう意味ですか?翻訳では、最適化のために少なくとも1つのパラメータを選択し、開始、終了、ステップの値が正しいことを確認しなければならない、というようなことが書かれていたはずです。 Aleksey Rodionov 2014.08.05 20:35 #11812 marketeer:"何もない "とはどういう意味だ?翻訳では、最適化のために少なくとも1つのパラメータを選択すること、テストの開始、終了、ステップが正しいことを確認すること、などの説明があったはずです。 変な話、何もわからない、疲れているのかもしれない、2日目もエラーに悩まされる。ありがとうございます、お言葉を頼りにしていきます。 Alexey Navoykov 2014.08.06 02:39 #11813 同じクラスの2つのオブジェクトを比較する必要があり、便利なように演算子==をオーバーロードすることにしました。 しかし、オブジェクトが動的である場合、私の演算子は実行されず、オブジェクト自体の代わりにポインタが比較されることが判明しました。まあ、原理的には、*a == *bというように、ポインタでオブジェクトにジャンプする操作が必要なのですが、MQLはその可能性を提供することを忘れています。追加する必要があります。class T { int x; public: T (int value) { x=value; } bool operator==(T& other) { Print("compare1"); return x==other.x; } bool operator==(T* other) { Print("compare2"); return x==other.x; } }; //------------------ void OnStart() { T* a= new T(10); T* b= new T(10); Alert(a==b); delete a; delete b; } Alexey Navoykov 2014.08.06 03:27 #11814 今思ったのですが、オブジェクトではなくポインタを比較するというのは、言語の仕様を考えると根本的に間違っています。 結局のところ、MQLはマネージド言語であり、ここではオブジェクトの格納方法やアクセス方法に関係なく「オブジェクト」という概念そのものが使われているのです。メンバーやメソッドへのアクセスは、どのような場合でもドットで行います。また、ポインタの比較が必要な場合は、GetPointer() を使用する必要があります。 A100 2014.08.06 14:36 #11815 meat:今思ったのですが、オブジェクトそのものではなく、ポインタの比較があるというのは、言語の仕様からして根本的に間違っていますね。 他の手段でできるのであれば、C++と矛盾する比較ルールをMQLで作る必要はない。ポインタがあり、オブジェクトを比較する必要がある場合は、比較関数を使用します。bool Compare(const T& t1, const T& t2 ) { return ( t1 == t2 ); } Alert( Compare( a, b )); (*a == *b)という形式のレコードを許可することと、(a == b)というレコードに別の意味を持たせることは全く別物です。 Aleksey Rodionov 2014.08.06 15:11 #11816 Expert Advisorをテスト すると、エラーが発生するOrderSend 関数の無効なテイクプロフィットOrderSend エラー 4107コードに触れずに修正するにはどうしたらよいですか? Alexey Navoykov 2014.08.06 17:00 #11817 A100: 他の手段が使える以上、C++と矛盾するような比較ルールをMQLで考案する必要はない。ポインタがあり、オブジェクトを比較する必要がある場合は、比較関数を使用します。 (*a == *b) のエントリを許可することを提案することと、(a == b) のエントリに異なる意味を与えることは、まったく別のことです。MQLのルールがC++のルールと矛盾していることを説明しています。 C++のルールに従えば、ポインタによるオブジェクトの参照は -> であるべきですが、ここではドットで行われています。つまり、C++では「ポインタ」と「オブジェクト」は全く別の概念で、だから構文も違う。 すべてが厳密だ。 しかし、ここではすべてが混同されている。 まるで、ポインタのプロパティとメソッドを扱っているように見えるのである。それが悪いとは言いません。OOPではその方が便利ですし、例えばC#ではそうなっています。 しかし、そうすると、他のものもすべて同じように実装しなければなりません。 コンセプトは1つでなければなりません。 そうしないと、ある場合にはポインタをオブジェクトそのものと同じように使い、ある場合にはポインタが突然生き返ったりして矛盾や混乱が生じてしまうのです。その結果、比較や代入の動作が変わってしまうという問題が発生しました。そして、この問題は、プログラムがコンパイルされ正常に動作し続けるものの、本来の動作には至らないため、発見することが困難でした。 Alexey Navoykov 2014.08.06 17:27 #11818 私のコードには、あるオブジェクトを含むクラスがあります。CClass { ... CObj Object; ... };CObjクラスは、その前に宣言されています。コンパイルしようとすると、次のようなエラーが発生します: 'Object' - cannot be unsetこのエラーの意味と原因は何ですか? 以前、このエラーに遭遇した覚えはありません。 CObjクラスには、コンストラクタとデストラクタがあります。Objectを単純に変数として 宣言してみたところ、すべてOKでした。 しかし、それがクラスの一部である場合は、そうはいきません。 Alexey Navoykov 2014.08.07 13:44 #11819 このエラー("- cannot be unset")が何なのか、どなたか説明してください。 いつ発生するのでしょうか? Ilyas 2014.08.07 14:55 #11820 meat: このエラー("- cannot be unset")が何なのか、どなたか説明してください。 いつ発生するのでしょうか? このオブジェクトにはZeroMemory 関数は 使用できません。 1...117511761177117811791180118111821183118411851186118711881189...3185 新しいコメント 取引の機会を逃しています。 無料取引アプリ 8千を超えるシグナルをコピー 金融ニュースで金融マーケットを探索 新規登録 ログイン スペースを含まないラテン文字 このメールにパスワードが送信されます エラーが発生しました Googleでログイン WebサイトポリシーおよびMQL5.COM利用規約に同意します。 新規登録 MQL5.com WebサイトへのログインにCookieの使用を許可します。 ログインするには、ブラウザで必要な設定を有効にしてください。 ログイン/パスワードをお忘れですか? Googleでログイン
最適化がうまくいっていない。
2014.08.05 19:34:42 Tester no optimized parameter selected, please check input(s) to be optimized and set carefully start, step and stop values.
翻訳では何も出なかった。
"何もない "とはどういう意味だ?翻訳では、最適化のために少なくとも1つのパラメータを選択すること、テストの開始、終了、ステップが正しいことを確認すること、などの説明があったはずです。
同じクラスの2つのオブジェクトを比較する必要があり、便利なように演算子==をオーバーロードすることにしました。 しかし、オブジェクトが動的である場合、私の演算子は実行されず、オブジェクト自体の代わりにポインタが比較されることが判明しました。まあ、原理的には、*a == *bというように、ポインタでオブジェクトにジャンプする操作が必要なのですが、MQLはその可能性を提供することを忘れています。追加する必要があります。
今思ったのですが、オブジェクトではなくポインタを比較するというのは、言語の仕様を考えると根本的に間違っています。 結局のところ、MQLはマネージド言語であり、ここではオブジェクトの格納方法やアクセス方法に関係なく「オブジェクト」という概念そのものが使われているのです。メンバーやメソッドへのアクセスは、どのような場合でもドットで行います。また、ポインタの比較が必要な場合は、GetPointer() を使用する必要があります。
今思ったのですが、オブジェクトそのものではなく、ポインタの比較があるというのは、言語の仕様からして根本的に間違っていますね。
Expert Advisorをテスト すると、エラーが発生する
OrderSend 関数の無効なテイクプロフィット
OrderSend エラー 4107
コードに触れずに修正するにはどうしたらよいですか?
他の手段が使える以上、C++と矛盾するような比較ルールをMQLで考案する必要はない。ポインタがあり、オブジェクトを比較する必要がある場合は、比較関数を使用します。 (*a == *b) のエントリを許可することを提案することと、(a == b) のエントリに異なる意味を与えることは、まったく別のことです。
MQLのルールがC++のルールと矛盾していることを説明しています。 C++のルールに従えば、ポインタによるオブジェクトの参照は -> であるべきですが、ここではドットで行われています。
つまり、C++では「ポインタ」と「オブジェクト」は全く別の概念で、だから構文も違う。 すべてが厳密だ。 しかし、ここではすべてが混同されている。 まるで、ポインタのプロパティとメソッドを扱っているように見えるのである。それが悪いとは言いません。OOPではその方が便利ですし、例えばC#ではそうなっています。 しかし、そうすると、他のものもすべて同じように実装しなければなりません。 コンセプトは1つでなければなりません。 そうしないと、ある場合にはポインタをオブジェクトそのものと同じように使い、ある場合にはポインタが突然生き返ったりして矛盾や混乱が生じてしまうのです。
その結果、比較や代入の動作が変わってしまうという問題が発生しました。そして、この問題は、プログラムがコンパイルされ正常に動作し続けるものの、本来の動作には至らないため、発見することが困難でした。
私のコードには、あるオブジェクトを含むクラスがあります。
CClass { ... CObj Object; ... };CObjクラスは、その前に宣言されています。
コンパイルしようとすると、次のようなエラーが発生します: 'Object' - cannot be unset
このエラーの意味と原因は何ですか? 以前、このエラーに遭遇した覚えはありません。 CObjクラスには、コンストラクタとデストラクタがあります。
Objectを単純に変数として 宣言してみたところ、すべてOKでした。 しかし、それがクラスの一部である場合は、そうはいきません。
このエラー("- cannot be unset")が何なのか、どなたか説明してください。 いつ発生するのでしょうか?