class A {};
class B : public A {};
class C {
public:
virtualint g( A* a ) { return ( 1 ); }
virtualint g( B* b ) { return ( 2 ); } //здесь полное совпадение
};
class D : public C {
public:
virtualint g( A* a ) { return ( 3 ); }
};
voidOnStart()
{
B* b = new B;
D* d = new D;
Print( d.g( b ));
}
このサイトからダウンロードしたものも含め、すべてのブローカーの端末が動かなくなった...。
再起動してもダメ、再起動、再インストールもダメ、以前は全てうまくいっていたのに、パソコンには何もインストールしていないし、端末にも何もインストールしていない。マーケットで買い物をするだけ。
動作中のインジケーターやEAをひとつひとつ外して、何が問題なのかを確認します。
エラーの説明ウィンドウの「詳細」をクリックすると、詳細が表示されます。ここに全文をコピーしてください。
empty、インジケーターやEA端末を1つも持たずに、同じことを...。
動作中のインジケーターやEAをひとつひとつキャプチャして、何が問題なのかを確認します。
エラーの説明ウィンドウにある「詳細」ボタンをクリックすると、詳細が表示されます。ここに全文をコピーしてください。
欲しいんだな?
crash --> 000007FCE8441F4F 48396B10 cmp [rbx+0x10], rbp
000007FCE8441F53 7530 jnz 0x7fce8441f85
000007FCE8441F55 488B03 mov rax, [rbx].
000007FCE8441F58 4C8BCF mov r9, rdi
000007FCE8441F5B 4D8BC7 mov r8, r15
000007FCE8441F5E 8BD6 mov edx, esi
000007FCE8441F60 488BCB mov rcx, rbx
: #021 00000000000011c8 eip: 0000000000000000 esp: 0000000000000000
: #022 0000000000001068 eip: 000007fcf54245db esp: 0000006818cffac8
000007FCF54245D1:00000A [000007FCF54245DB] NtYieldExecution (ntdll.dll)
000007FCF5426E50:000833 [000007FCF5427683] RtlUnicodeStringToInteger (ntdll.dll)
000007FCF3681828:00001A [000007FCF3681842] BaseThreadInitThunk(kernel32.dll)
000007FCF54774E8:000021 [000007FCF5477509] RtlVerifyVersionInfo (ntdll.dll)
: #023 000000000000111c eip: 000007fcf54245db esp: 0000006818e5fb18
000007FCF54245D1:00000A [000007FCF54245DB] NtYieldExecution (ntdll.dll)
000007FCF5426E50:000833 [000007FCF5427683] RtlUnicodeStringToInteger (ntdll.dll)
000007FCF3681828:00001A [000007FCF3681842] BaseThreadInitThunk (kernel32.dll)
000007FCF54774E8:000021 [000007FCF5477509] RtlVerifyVersionInfo (ntdll.dll)
前の例を解析しているうちに、MQLとC++の決定的な違いがわかりました。
MQL(build978)では、結果は: 2 (C::g が呼ばれる)、C++では、結果は: 3 (D::g が呼ばれる)です。
つまり、MQLでは引数の型がベースクラスであっても完全に一致するものを優先し、C++では型が完全に一致しないかもしれないが暗黙の型変換が 可能な最も近いクラスを優先することがわかったのです。
最近のC++コンパイラで結果を確認し、違いが確認できたら、できれば統一的な目的のためにC++を支持するように決めてください。
プライベートメッセージで 全文を送りました。
コピーコンストラクタや代入演算 子は、今後も予定されているのでしょうか?
ベースクラスAは15個のフィールドを持ち、2つの子孫クラスBとCを持ち、それぞれがさらに5個のフィールドを持つ。
あとは、20分程度のクエストですね。
トレーディング、自動売買システム、トレーディング戦略のテストに関するフォーラム
バグ、バグ、質問
A100, 2014.08.29 16:28
Print(...)で出力するとエラーになる。
印刷時に、出力の最初の部分が1から53までスキップされ(毎回異なる部分、明確なパターンはない)、途中でスキップされることもある。
で、299までスキップなしで印刷されます。
お時間のある方は、ぜひ実行してみて、出力に飛びがあれば書き込んでください。スキップがない場合 - nを大きくするか(私はn >= 300でスキップするようになりました)、または削除してみてください。
リクエストにお応えして #1060016 | 2014.08.29 16:30https://www.mql5.com/ru/users/A100/servicedesk/closed/14774
"プリント飛ばしをどのように知らせればいいのか?"という質問がありました。- 最も単純なオプションは、読み飛ばした行の代わりに省略記号をつけた1行です
この行を見たユーザーは、抜けがあることを理解し、.logファイルを参照する必要があります(行番号は必要ありません - 単に例として)。前の例を解析しているうちに、MQLとC++の決定的な違いがわかりました。
MQL(build978)では、結果は: 2 (C::g が呼ばれる)、C++では、結果は: 3 (D::g が呼ばれる)です。
つまり、MQLでは引数の型がベースクラスであっても完全に一致するものを優先し、C++では型が完全に一致しないかもしれないが暗黙の型変換が 可能な最も近いクラスを優先することがわかったのです。
最近のC++コンパイラで結果を確認し、違いが確認できたら、できれば統一的な目的のためにC++を支持するように決めてください。
そうなんです。完全に一致するものが優先されます。そして、それは本当に正しいのです。
なぜ、このような統一が必要なのでしょうか?不適切なプログラムの処理の一元化
コピーコンストラクタや代入演算 子は、今後も予定されているのでしょうか?
ベースクラスAは15個のフィールドを持ち、2つの子孫クラスBとCを持ち、それぞれがさらに5個のフィールドを持つ。
あとは、20分程度のクエストですね。