int OrdersTicket(filters, int function_id, boolnew = false){staticint tickets[functions count];int ticket = -1;
if(!new){
if(OrderSelect(tickets[function_id],SELECT_BY_TICKET)){return(OrderTicket());}
}
// Выбор и возврат тикета ордера с нужными фильтрамиreturn(ticket);
}
コードの書き方についてどう考えるかは重要ではなく、コードが正しく動作することが重要なのです。あなたのコードを持ってきて、どこで間違っているのかを尋ねるのではなく、もう一度言いますが、チケットが正しければ、4105エラーはありません
4105エラーは、チケットを渡す必要のない関数を呼び出すと 発生するため、おっしゃることは事実ではありません。
例えば、OrderTicket()が呼ばれる前にOrderSelect()が呼ばれていない場合にOrderTicket()が呼ばれた場合、これはこのスレッドで議論された状況です。
いや、私が言いたかったのは、外部への遷移(出力)に関係なく、各機能で自分の順番が確実に選択されるということです。
の各機能について、最後に選択された順序を 保存することです。
いや、私が言いたかったのは、外部への遷移(出力)に関係なく、各機能で自分の順番が確実に選択されるということです。
つまり、各機能の最後に選択された順番を、その機能として保存することです。
もし、最後に選択された 順番を制御する関数がいくつかネストされている場合、つまり、ある関数が別の関数を呼び出し、別の関数が3番目の関数を呼び出す場合、それぞれの関数は呼び出された瞬間の順番選択を保持し、戻り時にその状態を返します(私が質問を正しく理解していれば)。しかし、これは実に厄介な解決策です。通常、2段階以上のネストは考えにくい。このような関数の呼び出しによって、以前の注文選択がリセットされ、論理エラーが発生しないように、各関数の環境を制御することが主なポイントになります。これは、注文取得のメインループから呼び出すことができ、なおかつ何かを計算するために注文自体を取得するサービス関数にのみ必要である。
ところで、サービス機能がライブラリにあれば、-ポインタ(注文の選択)を保存する必要はないようですね?メインEAとライブラリにはそれぞれ「ポインタ」があるため、ライブラリで選択した注文はEAでは選択されず、その逆もまた然りです。
これは、関数AとBの両方が同じモジュール内に配置されていない場合、問題に対する完璧な解決策のように思われる
思想:必要なフィルターを外部に設置したオーダー選択 機能(全員に1つずつ)を持つこと(とにかく、各機能のどこかでこのオーダーを選択しなければならない(最も可能性が高いのは最初だ))。
この関数では、前に選んだ注文のチケットが返されるのは確実です。
この場合、ticket = OrdersTicket();の構文で完全に動作します。
4105エラーは、チケットを渡す必要のない関数を呼び出すと発生するため、おっしゃることは事実ではありません。
例えば、OrderTicket()が呼ばれる前にOrderSelect()が呼ばれていない場合にOrderTicket()が呼ばれた場合、これはこのスレッドで議論された状況です。
EAの設定、外部ファイル、どこからチケットを取得するのでしょうか?
もしそうなら、OrderSelect()コールの事実が 次のティックの開始時に残っているので、はい、エラーが発生します(少なくともテスターでは)、、、。
ところで、サービス機能がライブラリにあれば、-ポインタ(注文の選択)を保存する必要はないようですね?メインEAとライブラリにはそれぞれ「ポインタ」があるため、ライブラリで選択した注文はEAでは選択されず、その逆もまた然りです。
これは、関数AとBの両方が同じモジュール内に配置されていない場合、問題に対する完璧な解決策のように思われる
すべては、外部変数のグローバル性の程度に依存する。
ところで、サービス機能がライブラリにあれば、-ポインタ(注文の選択)を保存する必要はないようですね?メインEAとライブラリにはそれぞれ「ポインタ」があるため、ライブラリで選択した注文はEAでは選択されず、その逆もまた然りです。
これは、関数AとBの両方が同じモジュール内に配置されていない場合、問題に対する完璧な解決策のように思われる
私はパスします。それ以外のことはお役に立てません。私抜きでぐるぐる回る!!!
すべては、外部変数がどれだけグローバルであるかに依存します。
具体的には、現在の順序選択の 状態である「ポインタ」はモジュール内でグローバルであり、つまりこのポインタはライブラリでは同じで、プログラムモジュールでは異なる。つまり、プログラム中の関数Aがループ内で何らかの順序を選択し、ライブラリから補助関数Bを呼び出した場合、その動作中にBが別の順序を選択しても、関数Aでの順序選択はリターン時に変更されてはいけないということである。しかし、両方の関数がモジュール内にある場合、Bから戻るとき、その時点でAの仕事の論理が破られないように、A自身またはBの仕事の開始時と完了時に、Bが呼ばれる前と後のいずれかで、現在の順序選択を保存し復元する必要があります。