エラー、バグ、質問 - ページ 216 1...209210211212213214215216217218219220221222223...3185 新しいコメント Test Account 2010.12.02 11:18 #2151 Vigor:コールスタックオーバーフローの問題に遭遇した(と私は思う)。 オブジェクトの1つのメソッドを呼び出した後、以下の例を参照してください。コードは簡略化されており、要点のみです。クラス CClass1 は基底クラスであり、list1 にはこのクラスの子孫である異なるオブジェクトがあり、それらの init 関数は異なる実装になっています。そこで、init関数がこのようなリストを取ってくる(簡単に言うと、ネストしたインターフェース、パネルの中のパネルを初期化する)あるクラスでは、initから戻った後、行の中で 杞憂に終わる 2010.12.02 00:21:00 test1 (EURUSD,H1) 'Container.mqh' で無効なポインタアクセス (74,10)つまり、ポインターtは死んでいる。デバッグ時には、このようなエラーは発生せず、メソッド呼び出し後にポインタが「生きて」いて、ネストしたインターフェースが作成され、Expert Advisorがさらに動作します。これがエラーを回避する唯一の方法です。#property stacksize ポインタは何も達成しませんでした。 はっきりしたことは言えません。ソースコードが必要です。servicedeskにリクエストを 書き込んでみてください。 Общайтесь с разработчиками через Сервисдеск! www.mql5.com Ваше сообщение сразу станет доступно нашим отделам тестирования, технической поддержки и разработчикам торговой платформы. Aleksandr Chugunov 2010.12.02 14:57 #2152 休日から帰ってきてターミナルを起動し、360ビルドにアップデートしたら、1つのインジケーターが動かなくなった...。6.MQL5:チャート上のクリックイベントの処理を修正しました。グラフィカル オブジェクトをクリックすると、CHARTEVENT_OBJECT_CLICK+ CHARTEVENT_CLICK という 2 つのイベントが同時に生成されます(以前は CHARTEVENT_OBJECT_CLICK が 1 つだけでしたが、現在はダブルクリックをシミュレートすることが可能です)。ずっとこのままなのか、それともバグなのか? Документация по MQL5: Стандартные константы, перечисления и структуры / Константы графиков / Типы событий графика www.mql5.com Стандартные константы, перечисления и структуры / Константы графиков / Типы событий графика - Документация по MQL5 Test Account 2010.12.02 15:27 #2153 AlexSTAL: 休暇から戻り、ターミナルを起動し、360ビルドにアップデートしたら、1つのインジケータが動かなくなった...。を変化で読み取る。 6.MQL5:チャート上のクリックイベントの処理を修正しました。グラフィカル オブジェクトをクリックすると、CHARTEVENT_OBJECT_CLICK+ CHARTEVENT_CLICK という 2 つのイベントが同時に生成されます(以前は CHARTEVENT_OBJECT_CLICK が 1 つだけでしたが、現在はダブルクリックをシミュレートすることが可能です)。ずっとこのままなのか、それともバグなのか? これは意図的にやったことです。 Mykola Demko 2010.12.02 15:35 #2154 またしても、不可能の壁にぶち当たった。コンストラクタにパラメータを渡して、特定のパラメータでクラスが初期化されるようにする必要があります。この問題を回避するにはどうしたらよいでしょうか? オススメの方法を教えてください。 Aleksey Sergan 2010.12.02 15:54 #2155 Urain:またしても、不可能の壁にぶち当たった。クラスを初期化するためのコンストラクタに、あるパラメータを渡す必要があるのですが。この問題を回避するにはどうしたらいいのでしょうか? к さて、どうしたものか class test{ private: bool inited; int value; public: void test(){ inited = false; } bool Set( int passed ){ value = passed; return(true); } bool Init( int passed ){ if ( Set( passed ) ){ inited = true; return(true); } return(false); } int Get( ){ if( !inited ){ Print("Объект неинициализирован"); return(-1); } return(value); } }; void OnStart() { test var; if( !var.Init(1)){ Print("Ошибка инициализации объекта"); return; } Print(var.Get()); test var2; Print( var2.Get() ); } そしてもちろん、継承されたクラスの場合は正しい順序でInitsを配置する必要があります。 複雑なプロジェクトでのエラー処理について記事を書いてほしい。Print and return as hereは解決策ではない。 Mykola Demko 2010.12.02 16:12 #2156 gdtt: まあ、それ以外に道はないでしょう。 そしてもちろん、継承されたクラスの場合は正しい順序でInitsを配置する必要があります 一般的には、複雑なプロジェクトにおけるエラー処理、Print、return as hereは解決策にならない、などの記事を書いてもらいたいものです。つまり、コンストラクションを完成させるプリコンストラクタを作り、そのプリコンストラクタに初期化フラグを表示させることです。一般的には、良い解決策ですが、不便な点もあります。各関数に初期化フラグをポーリングする必要があり、クラス関数の数が多くなると不便です。もし、何かを変えなければならないとしたら、すべての機能を書き直さなければならない。SZ コードを編集し、タイプミスを修正しました。class test { private: bool inited; int value; public: test(void){inited=false;}; bool Set(int passed){value=passed;return(true);}; bool Init(int passed) { if(Set(passed))inited=true; return(inited); }; int Get() { if(!inited) { Print("Объект неинициализирован"); return(-1); } return(value); }; }; //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ void OnStart() { test var; var.Init(1); Print(var.Get()); test var2; Print(var2.Get()); } Aleksey Sergan 2010.12.02 16:21 #2157 Urain: つまり、コンストラクションを完成させるプリコンストラクタを作成し、そのプリコンストラクタに初期化フラグを設定するのです。 総じて、かっこいいのですが、不便な点もあります。初期化フラグを各関数に問い合わせる必要があり、クラス関数の数が多い場合は不便です。 のコードも2回目と同じように更新されています。 SZ コードを編集し、見落としを修正しました。 まあ、コンストラクタがあったとしても、初期化が成功したとは言えないでしょう。 もちろん、一度確認することも可能です。void OnStart() { test var; if( ! var.Init(1)){ // здесь какято обрабтка return; }; Print(var.Get()); test var2; Print(var2.Get()); } しかし、自分のコードを使うなら、呼び出し時に初期化の事実を確認することをルール化すればいいし、他の人が使うなら、「この構造しか使ってはいけない、そうでなければ結果は保証できない」なんて指示は書けません。いいえ、いずれにせよクラスメソ ッドで初期化されているかどうかをチェックする必要があります。 削除済み 2010.12.02 18:52 #2158 開発者の皆様へ。新ビルドの再起動直後追記別フォルダにインストールしたターミナルのアップデートは成功し、シンボルはリストに表示されています(ただし、アップデート前には開いているチャートは ありませんでした)...。 Sergey Gritsay 2010.12.02 20:09 #2159 バグなのか、ダメなのか、教えてください。ENUM_ORDER_TYPE Signal[21]; //+------------------------------------------------------------------+ //| Expert initialization function | //+------------------------------------------------------------------+ int OnInit() { //--- ArrayInitialize(Signal,WRONG_VALUE); //--- return(0); } //+------------------------------------------------------------------+ //| Expert deinitialization function | //+------------------------------------------------------------------+ void OnDeinit(const int reason) { //--- } //+------------------------------------------------------------------+ //| Expert tick function | //+------------------------------------------------------------------+ void OnTick() { //--- } //+------------------------------------------------------------------+エラーが表示される'ArrayInitialize' - no one of the overloads can be applied to the function call 削除済み 2010.12.02 21:37 #2160 sergey1294:これはバグなのか、許されないのか、教えてください。エラーが表示されますおそらく、ArrayInitialize()は、特定の型、正確には数値(intまたはdouble)の配列のみを埋めることを意図しているのでしょう。配列の型がENUM_ORDER_TYPE で あるため、ArrayInitialize を呼び出すと、このメソッドの呼び出しは許可されないというエラーが発生します。この場合、選択肢は2つあると私は考えています。1.ENUM_ORDER_TYPEの 配列型をint型に 変更し、同時にコードでそれを考慮する(少なくとも順序型はint型として容易に表現できる)。2.配列の「初期化」を独立に実装する。 Документация по MQL5: Стандартные константы, перечисления и структуры / Торговые константы / Свойства ордеров www.mql5.com Стандартные константы, перечисления и структуры / Торговые константы / Свойства ордеров - Документация по MQL5 1...209210211212213214215216217218219220221222223...3185 新しいコメント 取引の機会を逃しています。 無料取引アプリ 8千を超えるシグナルをコピー 金融ニュースで金融マーケットを探索 新規登録 ログイン スペースを含まないラテン文字 このメールにパスワードが送信されます エラーが発生しました Googleでログイン WebサイトポリシーおよびMQL5.COM利用規約に同意します。 新規登録 MQL5.com WebサイトへのログインにCookieの使用を許可します。 ログインするには、ブラウザで必要な設定を有効にしてください。 ログイン/パスワードをお忘れですか? Googleでログイン
コールスタックオーバーフローの問題に遭遇した(と私は思う)。
オブジェクトの1つのメソッドを呼び出した後、以下の例を参照してください。コードは簡略化されており、要点のみです。クラス CClass1 は基底クラスであり、list1 にはこのクラスの子孫である異なるオブジェクトがあり、それらの init 関数は異なる実装になっています。そこで、init関数がこのようなリストを取ってくる(簡単に言うと、ネストしたインターフェース、パネルの中のパネルを初期化する)あるクラスでは、initから戻った後、行の中で
杞憂に終わる
2010.12.02 00:21:00 test1 (EURUSD,H1) 'Container.mqh' で無効なポインタアクセス (74,10)
つまり、ポインターtは死んでいる。
デバッグ時には、このようなエラーは発生せず、メソッド呼び出し後にポインタが「生きて」いて、ネストしたインターフェースが作成され、Expert Advisorがさらに動作します。
これがエラーを回避する唯一の方法です。
#property stacksize ポインタは何も達成しませんでした。はっきりしたことは言えません。ソースコードが必要です。
servicedeskにリクエストを 書き込んでみてください。
休日から帰ってきてターミナルを起動し、360ビルドにアップデートしたら、1つのインジケーターが動かなくなった...。
6.MQL5:チャート上のクリックイベントの処理を修正しました。
グラフィカル オブジェクトをクリックすると、CHARTEVENT_OBJECT_CLICK+ CHARTEVENT_CLICK という 2 つのイベントが同時に生成されます(以前は CHARTEVENT_OBJECT_CLICK が 1 つだけでしたが、現在はダブルクリックをシミュレートすることが可能です)。
ずっとこのままなのか、それともバグなのか?
休暇から戻り、ターミナルを起動し、360ビルドにアップデートしたら、1つのインジケータが動かなくなった...。
を変化で読み取る。 6.MQL5:チャート上のクリックイベントの処理を修正しました。
グラフィカル オブジェクトをクリックすると、CHARTEVENT_OBJECT_CLICK+ CHARTEVENT_CLICK という 2 つのイベントが同時に生成されます(以前は CHARTEVENT_OBJECT_CLICK が 1 つだけでしたが、現在はダブルクリックをシミュレートすることが可能です)。
ずっとこのままなのか、それともバグなのか?
またしても、不可能の壁にぶち当たった。
コンストラクタにパラメータを渡して、特定のパラメータでクラスが初期化されるようにする必要があります。
この問題を回避するにはどうしたらよいでしょうか? オススメの方法を教えてください。
またしても、不可能の壁にぶち当たった。
クラスを初期化するためのコンストラクタに、あるパラメータを渡す必要があるのですが。
この問題を回避するにはどうしたらいいのでしょうか?
к
さて、どうしたものか
そしてもちろん、継承されたクラスの場合は正しい順序でInitsを配置する必要があります。
複雑なプロジェクトでのエラー処理について記事を書いてほしい。Print and return as hereは解決策ではない。
まあ、それ以外に道はないでしょう。
そしてもちろん、継承されたクラスの場合は正しい順序でInitsを配置する必要があります
一般的には、複雑なプロジェクトにおけるエラー処理、Print、return as hereは解決策にならない、などの記事を書いてもらいたいものです。
つまり、コンストラクションを完成させるプリコンストラクタを作り、そのプリコンストラクタに初期化フラグを表示させることです。
一般的には、良い解決策ですが、不便な点もあります。各関数に初期化フラグをポーリングする必要があり、クラス関数の数が多くなると不便です。
もし、何かを変えなければならないとしたら、すべての機能を書き直さなければならない。
SZ コードを編集し、タイプミスを修正しました。
つまり、コンストラクションを完成させるプリコンストラクタを作成し、そのプリコンストラクタに初期化フラグを設定するのです。
総じて、かっこいいのですが、不便な点もあります。初期化フラグを各関数に問い合わせる必要があり、クラス関数の数が多い場合は不便です。
のコードも2回目と同じように更新されています。
SZ コードを編集し、見落としを修正しました。
まあ、コンストラクタがあったとしても、初期化が成功したとは言えないでしょう。
もちろん、一度確認することも可能です。
しかし、自分のコードを使うなら、呼び出し時に初期化の事実を確認することをルール化すればいいし、他の人が使うなら、「この構造しか使ってはいけない、そうでなければ結果は保証できない」なんて指示は書けません。いいえ、いずれにせよクラスメソ ッドで初期化されているかどうかをチェックする必要があります。
開発者の皆様へ。
新ビルドの再起動直後
追記
別フォルダにインストールしたターミナルのアップデートは成功し、シンボルはリストに表示されています(ただし、アップデート前には開いているチャートは ありませんでした)...。
バグなのか、ダメなのか、教えてください。
エラーが表示される
これはバグなのか、許されないのか、教えてください。
エラーが表示されます
おそらく、ArrayInitialize()は、特定の型、正確には数値(intまたはdouble)の配列のみを埋めることを意図しているのでしょう。
配列の型がENUM_ORDER_TYPE で あるため、ArrayInitialize を呼び出すと、このメソッドの呼び出しは許可されないというエラーが発生します。
この場合、選択肢は2つあると私は考えています。
1.ENUM_ORDER_TYPEの 配列型をint型に 変更し、同時にコードでそれを考慮する(少なくとも順序型はint型として容易に表現できる)。
2.配列の「初期化」を独立に実装する。