エラー、バグ、質問 - ページ 2359 1...235223532354235523562357235823592360236123622363236423652366...3185 新しいコメント Alexey Navoykov 2018.12.24 16:09 #23581 A100:を考慮して、特に再確認しました。 It's OK 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型をとることはないのです。 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の後のアスタリスクを取ってください、目が痛くなります)このバグでもう全部わかってしまいましたね。個人的にはアスタリスクのないオブジェクト変数は邪魔に感じます ))厄介なバグの一つは、*aの代わりにA a=new 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 } クセのあるダブルは知っていても、足し算の順番を変えれば(相対的に 非常に異なる数字を除いて)結果が違う!というようなことはない。なぜここでこうなるのか、バカでもわかるように説明してください。 ソースの下2行を見ればわかる。 Aliaksandr Hryshyn 2018.12.25 13:24 #23590 開発者向けのエラーです。 スクリプトがコンパイルされません、原因を特定してください))。添付ファイルをご利用ください。 同じファイルです。 ファイル: Test1.mq5 9 kb 1...235223532354235523562357235823592360236123622363236423652366...3185 新しいコメント 取引の機会を逃しています。 無料取引アプリ 8千を超えるシグナルをコピー 金融ニュースで金融マーケットを探索 新規登録 ログイン スペースを含まないラテン文字 このメールにパスワードが送信されます エラーが発生しました Googleでログイン WebサイトポリシーおよびMQL5.COM利用規約に同意します。 新規登録 MQL5.com WebサイトへのログインにCookieの使用を許可します。 ログインするには、ブラウザで必要な設定を有効にしてください。 ログイン/パスワードをお忘れですか? Googleでログイン
を考慮して、特に再確認しました。
It's OK DJ.
使用するコンパイラは?
VS 2010を使用しています。
二項演算子 '=' : 右辺のオペランドが 'A' 型である演算子が存在しない(あるいは許容できる変換がない)。
p.s. 「配慮して」の意味がよくわからないのですが?それは、ベースクラスを派生クラスに暗黙的にコピーすることの可否についてでした。
Visual Studioでは、私の例も 動作します。明示的なコピー演算子のことで、コードで説明しました。
念のため書いておきますが、明示的なものを無効化した場合、誤って同時に無効化することがないようにするためです
Visual Studioでは、私の例も 動作します。明示的なコピー演算子のことで、コードで説明しました。
私は明示的な演算子のことではなく、あなたが「狭量」とおっしゃるこの場合の暗黙的な演算子の不許可についてお話したのですが、そうではありませんね。
コピーを作成する必要がある場合、まずC++で明示的にbを正しい型にキャストする必要があります。このようなコピーは、オブジェクトのカプセル化に反するからです。だからこそ、暗黙の了解ではいけないのです。
明示的なコピー演算子という意味で、コードで説明しました。
コンパイラが(コードの文脈で)明示的と暗黙的に分けているのか疑問です。そうでなければ、修正するのは簡単だ
ちなみに、演算子型は問題ないようです
まず演算子B::を探し、それがなければ、次に演算子A::を探し、そこにもなければ、役目は終わったとみなして何もしない(結果的にポインタは壊れるが) :)。
もない場合は、役目を終えたと判断して何もしない(ポインターは壊れてしまうが) :)
なぜ、何もしないのですか?暗黙のうちに(自動的に)operator=(const A&)でコピーしているが、これはやってはいけないことである。
そして最後にBの後のアスタリスクを削除してください、目が痛くなります)このバグで既に全てが判明しています。
そして最後にBの後のアスタリスクを取ってください、目が痛くなります)このバグでもう全部わかってしまいましたね。
個人的にはアスタリスクのないオブジェクト変数は邪魔に感じます ))厄介なバグの一つは、*aの代わりにA a=new Aと書いて、何が間違っているのか長い間理解できないことです)私は逆に、あなたのアドバイスに従って、プライベートop.=&を宣言すればすべてが正しく動作することを示しました。この場合、エディタはすぐにエラーを出します。これからはそのようにします ))
クセのあるダブルは知っていても、足し算の順番を変えれば(相対的に 非常に異なる数字を除いて)結果が違う!というようなことはない。なぜここでこうなるのか、バカでもわかるように説明してください。
ソースの下2行を見ればわかる。
開発者向けのエラーです。
スクリプトがコンパイルされません、原因を特定してください))。添付ファイルをご利用ください。
同じファイルです。