1

引数が 10 個以上ある場合に、個々の引数をコンストラクターに渡すのは面倒であり、メンテナンスも容易ではありません。また、コンストラクターの引数を読み取るのも非常に面倒です。

使用したいパターンは Ruby/Node/Python で一般的に使用されており、MQL4 にも同様のものがあることを望んでいました

したがって、キーと値のペア オブジェクトをすべての引数と共にコンストラクターに渡したいと思います。残念ながら、私は得ています-

struct cannot be defined in param list. 

コンパイラから。

私は C のまったくの初心者で、これが初めての MetaQuotes4 プログラム (EA) の試みです。私はグーグルでドキュメントを調べました。クラス、配列、および構造体の受け渡しは、参照渡しを使用してのみ行うことができると言っているドキュメント以外に何も見つかりません。

問題は10行目。

スクリーンショット

これは WIP であるため、コンパイル エラーがロードされます。残りのエラーは処理できますが、構造体が params で許可されていないという問題に困惑しています。どんな助けやアドバイスも素晴らしいでしょう。

代替パターンがあるかも?

前もって感謝します。

4

2 に答える 2

2

注意してください -MQL4多くの点でC++コンパイラとは異なります

構文コンストラクターは似ているように見えるかもしれませんが、実際の使用はコンパイラー.MQL4によるコンパイルで制限または禁止されていMetaLang.exeます。

だから、struct有望に見えますが、あなたの希望には合いません.

あなたのプリントスクリーンに描かれているように、

...
string symbol = params.symbol;
...

stringyou に入力された値も含める予定ですstruct

これは可能ですが、MQL4ドキュメントではそのような使用法に対する制限を暗示しており、関数呼び出しパラメーターの受け渡しで安全に使用できる ,structの唯一の形式はSIMPLE STRUCTです。, あなたは同様の専門分野の準備ができていたでしょう. その中には、内部的にはではなく である が含まれており、悪夢が始まったばかりです... (そして、それがあなたのDLLインターフェースなどで内破するものを想像することができます. ) .structstructMQL4stringstringstruct

構造体名は識別子(変数や関数の名前)として使用できません。

また

MQL4 構造要素では、アライメントなしで直接互いに続くことに注意してください。

C++ では、次の命令を使用して、コンパイラに対してこのような順序が作成され

#pragma pack(1)

ます。

return演算子を使用すると、配列、クラス オブジェクト、複合構造型の変数を返すことはできません。

したがって、MQL4 ドキュメンテーションを最初から最後まで注意して読んでください。いくつかの「専門性」は場所に隠されているため、アプリオリにはほとんど期待できません。

于 2015-09-06T18:39:36.210 に答える