エラー、バグ、質問 - ページ 417 1...410411412413414415416417418419420421422423424...3185 新しいコメント Andrey Dik 2011.06.15 19:38 #4161 joo:はい、return()で何かを返す必要がある場合です。あるいは、少なくともコンパイラがその関数が何かを返すと確信できるようにします。 に限らず、このようなことが言える。 switchが、一般に、void を除くすべての関数に対してこのコードをコンパイルしてみてください。//+----------------------------------------------------------------------------+ //| Scale.mqh | //| Copyright © 2010, JQS aka Joo. | //| http://www.mql4.com/ru/users/joo | //| https://www.mql5.com/ru/users/joo | //—————————————————————————————————————————————————————————————————————————————— double Scale(double In,double InMIN,double InMAX,double OutMIN,double OutMAX) { if (OutMIN==OutMAX) return(OutMIN); if (InMIN==InMAX) return((OutMIN+OutMAX)/2.0); else { if (In<InMIN) return(OutMIN); if (In>InMAX) return(OutMAX); //return(((In-InMIN)*(OutMAX-OutMIN)/(InMAX-InMIN))+OutMIN); } } //——————————————————————————————————————————————————————————————————————————————はコンパイルできません。では、アンコンパイルしてください。//return(((In-InMIN)*(OutMAX-OutMIN)/(InMAX-InMIN))+OutMIN);そして、奇跡が起こる!:) 削除済み 2011.06.15 19:39 #4162 Yedelkin:Handbookによると、boolはinteger以外の特殊な型だそうですが...。だから、私の間違った発言を削除したのです。反論はしませんが......私は専門家ではありません。大文字小文字の区別ではなく、単なる列挙(bool型をその中で一番小さいものと考える)の意味です。以下は、同じコンパイルエ ラーの例です。この例に関する質問を繰り返しますが、コンパイラはTriple列挙型の値のリストとその総数を考慮しないということですか? 私はswitch演算子に列挙型の値をすべて使用しました。やはり、コンパイラ(開発者)が再保険をかけているのですね。ポイントは、明示的に初期化されていない変数は、その型によってfalse/0 値を得るということです(2番目は列挙を指します)。しかし、もし可能な範囲の外の値 (Triple の例では、範囲 -1 - +1 の外の任意の値) を、devoultive な結果を伴わない実行で取得したら、深刻な問題が発生します。 。 Yedelkin 2011.06.15 19:41 #4163 Interesting: もし不合格者が除外された場合、この関数は何を返すべきでしょうか? ENUM_CHART_MODE 列挙から最後の値だと思います。これから確認します。 ...うーん、うまくいかなかった。ChartMode=ENUM_CHART_MODE::-1 と表示 されます。 Andrey Dik 2011.06.15 19:41 #4164 Interesting:私の理解では、コンパイラ(開発者)が再保険をかけているのだと思います。ポイントは、明示的に初期化されないと、変数の型によってfalse/ 0の値が割り当てられることです(2つ目は列挙型に関するものです)。しかし、もし可能なバリアントの範囲外の値(Tripleの例では、範囲 -1 - +1以外の任意の値である可能性があります)を取得した場合、切実な結果なしに変数を実行するときに深刻な問題が発生します。 それはちょっと違いますね。前の記事を見てください。 削除済み 2011.06.15 19:53 #4165 joo: そんなことはどうでもいいんです。前の記事を見てください。そう、コンパイラはそれが何かを返すようにしなければならないのです。これは妥当な安心材料だと思います(特に、例のスイッチ 処理にデフォルトがあること)。値を返す必要がない場合は別問題です。 Dmitriy Skub 2011.06.15 20:03 #4166 Yedelkin: 最後の値は、ENUM_CHART_MODE 列挙のものだと思います。今すぐ確認します。 ...そう、うまくいかなかったんです。ChartMode=ENUM_CHART_MODE::-1 と表示 されます。もし、そのような複雑なことを深く知りたければ、Björn Straustrup, C++を読んでください。正直なところ、私はMQL5のドキュメントをちゃんと読んでいないんです。開発者は、この言語の標準をむしろ正確に守っているのです。 Ilya Savin 2011.06.16 08:37 #4167 こんにちは。466を構築する。起動すると、接続が表示され、数キロバイトのダウンロードが行われると同時に、端末が閉じます。インターネットを切断する→閉じない。logs/Crash/ディレクトリにあるファイルを添付します。この問題を解決する方法はあるのでしょうか?感謝)) が付いていない。以下、本文です。時刻 : 2011.06.16 10:28 (0:00:11)プログラム:クライアント端末バージョン : 500.466 (2011年06月09日)リビジョン:32925OS : Windows 7 Professional Service Pack 1 (Build 7601)プロセッサー : 2 x AMD Athlon 64 X2 デュアルコアプロセッサー 5000+。メモリ : 1983 Mbの911空きバーチャル : 2047 Mb の 1815 無料版CrashMD5 : 2219A3BB7215B179256A7E41D40BD511例外:C0000094 at 007B41B4 NA to 00000000モジュール : 00400000 00B96000 terminal.exe (5.0.0.466): 6FDC0000 00027000 wlidnsp.dll (7.250.4225.0)007B41A0:00014 [007B41B4] #22663 (terminal.exe)774D58FC:00C74 [774D6570] strcspn (ntdll.dll)774D58FC:00CAA [774D65A6] strcspn (ntdll.dll)74A5DC14:000EC [74A5DD00] func_0x74A5DC14 (dbghelp.dll)74A5E10D:0016E [74A5E27B] SymGetLineFromAddr64 (dbghelp.dll)74A5F73A:0085A [74A5FF94] func_0x74A5F73A (dbghelp.dll)74A6189C:000D2 [74A6196E] func_0x74A6189C (dbghelp.dll)74A5F73A:00A54 [74A6018E] func_0x74A5F73A (dbghelp.dll)74A5DC14:000EC [74A5DD00] func_0x74A5DC14 (dbghelp.dll)74A5E10D:0016E [74A5E27B] SymGetLineFromAddr64 (dbghelp.dll)74A5F73A:0085A [74A5FF94] func_0x74A5F73A (dbghelp.dll)74A6189C:000D2 [74A6196E] func_0x74A6189C (dbghelp.dll)74A5F73A:00A54 [74A6018E] func_0x74A5F73A (dbghelp.dll)774D68C7:000E0 [774D69A7] RtlLogStackBackTrace (ntdll.dll)774D58FC:004D7 [774D5DD3] strcspn (ntdll.dll)レジスタ : EAX=0000000000 EIP=007B41B4 EFLGS=00010246 ES=0023: EBX=000000000000 ESP=0012E2CC EBP=0012E320 FS=003b: ECX=00000000 ESI=04C74C48 CS=001b GS=0000: edx=0000000000 edi=00000007 ds=0023 ss=0023 Errors, bugs, questions MT4 Crashes Unexpectedly Better NN EA development Yedelkin 2011.06.16 10:50 #4168 引き続き、値を返す関数でswitch演算 子を使うというテーマです。昨日、中間的な結論が得られ、enumeration+switchを使用する場合、デフォルトラベルの使用が必須 と なることが確認されました。しかし、この結論が反証された場合の例を挙げよう。enum Triple { err=-1, no = 0, hay= 1 }; Triple triple_var1,triple_var2; Triple Test(void) { switch(triple_var1) { case err: return(err); case no: return(no); case hay: return(hay); default: switch(triple_var2) { case err: return(err); case no: return(no); case hay: return(hay); } } } void OnStart() { Test(); } ここでは、スイッチオペレータを2回適用し、再度適用する際にデフォルトの ラベルを除外しています(2段階目)。同じ演算子、同じコンパイラで動作しています。 コンパイラが変数 triple_var1 と triple_var2 にゴミが入る可能性を考慮し、同時に Triple enumeration の値のリストとその数を考慮しないと仮定すると、なぜコンパイラはスイッチ演算子の2階層目でエラーを報告しないのでしょうか?中間的な結論や仮定が間違っていたのか、それともコンパイラが「第1レベル」のみの演算子チェックに限定していたのか?特にswitch(triple_var2) の label/tags をコメントアウトすると、Test() 関数が void 型でないにもかかわらず、エラーメッセージが出なくなります。switch(triple_var1)演算子のケースラベルの後に(デフォルト ラベルなしの)switch(triple_var2)演算子を挿入しても同様の結果になる。 Ilyas 2011.06.16 10:56 #4169 Yedelkin:引き続き、値を返す関数でswitch演算 子を使うというテーマです。昨日、中間的な結論が得られ、enumeration+switchを使用する場合、デフォルトラベルの使用が必須と なることが確認されました。しかし、この結論に反論する例がある。 ここでは、スイッチオペレータを2回適用し、再度適用したとき(2段階目)には、デフォルト ラベルを除外しています。同じ演算子、同じコンパイラで動作しています。 コンパイラがtriple_var1, triple_var2変数にゴミがある可能性を考慮し、同時にtriple列挙の値のリストとその数を考慮しないと仮定すると、なぜコンパイラは2階層目のスイッチ演算子の使用でエラーを報告しないのでしょうか?中間的な結論や仮定が間違っていたのか、それともコンパイラが「第1レベル」のみの演算子チェックに限定していたのか?特にswitch(triple_var2) のラベルやタグをコメントアウトすると、Test() 関数が void 型でないにもかかわらず、エラーメッセージは発生しません。。 これは私たちの欠陥です。見つけてくれてありがとう、修正します。エラーが発生します。 スイッチのチェックですべての値をカバーすることは、コンパイルの域を超えています。 MQL5の「機能」としては面白いので、どうするかはこれから考えます。 Ilyas 2011.06.16 11:53 #4170 誤記を修正しました。 "スイッチチェッカーチップは、有効/不正の制御を実装することができないことが検討されています。 switch式の値は、例えば何でもよい。enum EV { v1, v2, }; string Test(void) { switch(EV(3)) { case v1: return("v1"); case v2: return("v2"); } return("oops"); } void OnStart() { Print(Test()); } 1...410411412413414415416417418419420421422423424...3185 新しいコメント 取引の機会を逃しています。 無料取引アプリ 8千を超えるシグナルをコピー 金融ニュースで金融マーケットを探索 新規登録 ログイン スペースを含まないラテン文字 このメールにパスワードが送信されます エラーが発生しました Googleでログイン WebサイトポリシーおよびMQL5.COM利用規約に同意します。 新規登録 MQL5.com WebサイトへのログインにCookieの使用を許可します。 ログインするには、ブラウザで必要な設定を有効にしてください。 ログイン/パスワードをお忘れですか? Googleでログイン
はい、return()で何かを返す必要がある場合です。
あるいは、少なくともコンパイラがその関数が何かを返すと確信できるようにします。
switch
が、一般に、void を除くすべての関数に対して
このコードをコンパイルしてみてください。
はコンパイルできません。
では、アンコンパイルしてください。
//return(((In-InMIN)*(OutMAX-OutMIN)/(InMAX-InMIN))+OutMIN);
そして、奇跡が起こる!:)
Handbookによると、boolはinteger以外の特殊な型だそうですが...。だから、私の間違った発言を削除したのです。反論はしませんが......私は専門家ではありません。
大文字小文字の区別ではなく、単なる列挙(bool型をその中で一番小さいものと考える)の意味です。以下は、同じコンパイルエ ラーの例です。
この例に関する質問を繰り返しますが、コンパイラはTriple列挙型の値のリストとその総数を考慮しないということですか? 私はswitch演算子に列挙型の値をすべて使用しました。
やはり、コンパイラ(開発者)が再保険をかけているのですね。ポイントは、明示的に初期化されていない変数は、その型によってfalse/0 値を得るということです(2番目は列挙を指します)。
しかし、もし可能な範囲の外の値 (Triple の例では、範囲 -1 - +1 の外の任意の値) を、devoultive な結果を伴わない実行で取得したら、深刻な問題が発生します。
。
もし不合格者が除外された場合、この関数は何を返すべきでしょうか?
ENUM_CHART_MODE 列挙から最後の値だと思います。これから確認します。
...うーん、うまくいかなかった。ChartMode=ENUM_CHART_MODE::-1 と表示 されます。私の理解では、コンパイラ(開発者)が再保険をかけているのだと思います。ポイントは、明示的に初期化されないと、変数の型によってfalse/ 0の値が割り当てられることです(2つ目は列挙型に関するものです)。
しかし、もし可能なバリアントの範囲外の値(Tripleの例では、範囲 -1 - +1以外の任意の値である可能性があります)を取得した場合、切実な結果なしに変数を実行するときに深刻な問題が発生します。
そんなことはどうでもいいんです。前の記事を見てください。
そう、コンパイラはそれが何かを返すようにしなければならないのです。これは妥当な安心材料だと思います(特に、例のスイッチ 処理にデフォルトがあること)。
値を返す必要がない場合は別問題です。
最後の値は、ENUM_CHART_MODE 列挙のものだと思います。今すぐ確認します。
...そう、うまくいかなかったんです。ChartMode=ENUM_CHART_MODE::-1 と表示 されます。もし、そのような複雑なことを深く知りたければ、Björn Straustrup, C++を読んでください。
正直なところ、私はMQL5のドキュメントをちゃんと読んでいないんです。開発者は、この言語の標準をむしろ正確に守っているのです。
こんにちは。
466を構築する。
起動すると、接続が表示され、数キロバイトのダウンロードが行われると同時に、端末が閉じます。インターネットを切断する→閉じない。
logs/Crash/ディレクトリにあるファイルを添付します。
この問題を解決する方法はあるのでしょうか?
感謝
)) が付いていない。以下、本文です。
時刻 : 2011.06.16 10:28 (0:00:11)
プログラム:クライアント端末
バージョン : 500.466 (2011年06月09日)
リビジョン:32925
OS : Windows 7 Professional Service Pack 1 (Build 7601)
プロセッサー : 2 x AMD Athlon 64 X2 デュアルコアプロセッサー 5000+。
メモリ : 1983 Mbの911空き
バーチャル : 2047 Mb の 1815 無料版
CrashMD5 : 2219A3BB7215B179256A7E41D40BD511
例外:C0000094 at 007B41B4 NA to 00000000
モジュール : 00400000 00B96000 terminal.exe (5.0.0.466)
: 6FDC0000 00027000 wlidnsp.dll (7.250.4225.0)
007B41A0:00014 [007B41B4] #22663 (terminal.exe)
774D58FC:00C74 [774D6570] strcspn (ntdll.dll)
774D58FC:00CAA [774D65A6] strcspn (ntdll.dll)
74A5DC14:000EC [74A5DD00] func_0x74A5DC14 (dbghelp.dll)
74A5E10D:0016E [74A5E27B] SymGetLineFromAddr64 (dbghelp.dll)
74A5F73A:0085A [74A5FF94] func_0x74A5F73A (dbghelp.dll)
74A6189C:000D2 [74A6196E] func_0x74A6189C (dbghelp.dll)
74A5F73A:00A54 [74A6018E] func_0x74A5F73A (dbghelp.dll)
74A5DC14:000EC [74A5DD00] func_0x74A5DC14 (dbghelp.dll)
74A5E10D:0016E [74A5E27B] SymGetLineFromAddr64 (dbghelp.dll)
74A5F73A:0085A [74A5FF94] func_0x74A5F73A (dbghelp.dll)
74A6189C:000D2 [74A6196E] func_0x74A6189C (dbghelp.dll)
74A5F73A:00A54 [74A6018E] func_0x74A5F73A (dbghelp.dll)
774D68C7:000E0 [774D69A7] RtlLogStackBackTrace (ntdll.dll)
774D58FC:004D7 [774D5DD3] strcspn (ntdll.dll)
レジスタ : EAX=0000000000 EIP=007B41B4 EFLGS=00010246 ES=0023
: EBX=000000000000 ESP=0012E2CC EBP=0012E320 FS=003b
: ECX=00000000 ESI=04C74C48 CS=001b GS=0000
: edx=0000000000 edi=00000007 ds=0023 ss=0023
引き続き、値を返す関数でswitch演算 子を使うというテーマです。昨日、中間的な結論が得られ、enumeration+switchを使用する場合、デフォルトラベルの使用が必須 と なることが確認されました。しかし、この結論が反証された場合の例を挙げよう。
ここでは、スイッチオペレータを2回適用し、再度適用する際にデフォルトの ラベルを除外しています(2段階目)。同じ演算子、同じコンパイラで動作しています。 コンパイラが変数 triple_var1 と triple_var2 にゴミが入る可能性を考慮し、同時に Triple enumeration の値のリストとその数を考慮しないと仮定すると、なぜコンパイラはスイッチ演算子の2階層目でエラーを報告しないのでしょうか?中間的な結論や仮定が間違っていたのか、それともコンパイラが「第1レベル」のみの演算子チェックに限定していたのか?特にswitch(triple_var2) の label/tags をコメントアウトすると、Test() 関数が void 型でないにもかかわらず、エラーメッセージが出なくなります。switch(triple_var1)演算子のケースラベルの後に(デフォルト ラベルなしの)switch(triple_var2)演算子を挿入しても同様の結果になる。
引き続き、値を返す関数でswitch演算 子を使うというテーマです。昨日、中間的な結論が得られ、enumeration+switchを使用する場合、デフォルトラベルの使用が必須と なることが確認されました。しかし、この結論に反論する例がある。
ここでは、スイッチオペレータを2回適用し、再度適用したとき(2段階目)には、デフォルト ラベルを除外しています。同じ演算子、同じコンパイラで動作しています。 コンパイラがtriple_var1, triple_var2変数にゴミがある可能性を考慮し、同時にtriple列挙の値のリストとその数を考慮しないと仮定すると、なぜコンパイラは2階層目のスイッチ演算子の使用でエラーを報告しないのでしょうか?中間的な結論や仮定が間違っていたのか、それともコンパイラが「第1レベル」のみの演算子チェックに限定していたのか?特にswitch(triple_var2) のラベルやタグをコメントアウトすると、Test() 関数が void 型でないにもかかわらず、エラーメッセージは発生しません。。
スイッチのチェックですべての値をカバーすることは、コンパイルの域を超えています。
MQL5の「機能」としては面白いので、どうするかはこれから考えます。
"スイッチチェッカーチップは、有効/不正の制御を実装することができないことが検討されています。
switch式の値は、例えば何でもよい。