記事"グラフィカルインタフェースXI:標準グラフィックライブラリの統合(ビルド16)"についてのディスカッション - ページ 8 12345678910 新しいコメント Pavel Kolchin 2019.10.11 18:35 #71 Oleksii Chepurnyi: ElementBase.mqhファイルを変更しようとしたら、さらに叱られた。 Oleksii Chepurnyi 2019.10.11 21:45 #72 Pavel Kolchin:ElementBase.mqhファイルを変更しようとしたら、さらに叱られた。 ElementBase.mqhとElement.mqhの両方を変更する必要があります。 Andrey Khatimlianskii 2019.10.11 23:24 #73 MetaQuotes Software Corp.:最近のビルドでは、先祖のメソッドが 子孫のメソッドでオーバーロードされて いる場合のために、コンパイラにメッセージを追加しました:例この例では、祖先クラス SFoo の func(int) 関数が子孫クラス SBar で呼び出されています。 子クラスには func(double) 関数しかなく、コンパイラは適切なパラメータを持つ関数を継承ツリーから探そうとします。つまり、MQL5コンパイラは子孫のメソッドをオーバーライドする代わりにオーバーロードを実行するのです。言語開発の初期段階では、MQL5コンパイラのこの緩和は重要視されていませんでした。しかし将来的に変更される可能性があるため、現在ではMQL5プログラムの開発者に対し、コードを考慮し修正するよう明確な警告が出されている。厳密に言えば、オーバーライドはもう少し広い概念です。オーバーロードとオーバーライドの違いについては、インターネット 。 1.そのようなコードはコンパイルされないということでよろしいでしょうか? class CA { public: void func( void ) { Print( __FUNCSIG__ ); }; }; class CB : CA { public: //void func( void ) { CA::func(); }; }; // この行がないとコンパイルできない。 }; class CC { public: CB m_b; CC(void) { m_b.func(); } }; void OnStart() { CC c; } 'CA::func' - cannot access private member function TestCompiler.mq5 27 18 see declaration of 'CA::func' TestCompiler.mq5 13 8 1 error(s), 0 warning(s) 2 1 2.このコードは、上記のエラーに加えて、「非推奨の動作、hiddenメソッド呼び出しは将来のMQLコンパイラー・バージョンで無効になります」という警告を 生成するということでよろしいでしょうか? TestCompiler.mq5 27 18。 class CA { public: void func( void ) { Print( __FUNCSIG__ ); }; }; class CB : CA { public: //void func( void ) { CA::func(); }; }; // この行がないとコンパイルできない。 bool func( int a ) { return(true); }; }; class CC { public: CB m_b; CC(void) { m_b.func(); } }; void OnStart() { CC c; } Oleksii Chepurnyi 2019.10.12 11:55 #74 Andrey Khatimlianskii:1.そのようなコードはコンパイルされないということでよろしいでしょうか?2.このコードは、上記のエラーに加えて、「非推奨の動作、非表示メソッド呼び出しは将来のMQLコンパイラー・バージョンで無効になります」という警告を 発生させますが、正しいですか? TestCompiler.mq5 27 18。 ターミナルの新バージョンに関するスレッドで質問したほうがいいのでは?そちらの方が早く答えてくれると思います。) 警告はコンパイラの新しいロジックに適合しているようですが、プライベート・メンバーについては理解できません。 Pavel Kolchin 2019.10.12 15:48 #75 Oleksii Chepurnyi:ElementBase.mqhとElement.mqhの両方を変更する必要がある。 ElementBase.mqhでは、"Is "を "Set "に置き換えたことは明らかだ(しかし、なぜそんなことができるのかは不明だ)。 virtual void Set Available(const bool state) { m_is_available=state; } bool IsAvailable(void) const { return(m_is_available); } しかし、Element.mqhには別の行があります。 //--- 商品の在庫状況 virtual void IsAvailable(const bool state); Oleksii Chepurnyi 2019.10.12 19:47 #76 Pavel Kolchin:ElementBase.mqhでは、あなたが "Is "を "Set "に置き換えたことは明らかだ(しかし、なぜそうすることができるのかは不明だ)。しかし、Element.mqhには別の行があります。 今、MQは同じ名前(変数、メソッドなど)を好みません。) メソッドの名前を変えただけです。 私たちは何も変えたくありません - 作者がすべてをやり直すのを待ちます ) ) Pavel Kolchin 2019.10.12 20:46 #77 Oleksii Chepurnyi: 作者はおそらくこのプロジェクトを"終えて "いるのだろうが、コンパイラが悪態をつかないように、どの行に何を書けばいいのか、そしてもちろん、人々のためにオーソドックスな(修正された)ファイル(ElementBase.mqhとElement.mqh)を指定してくれるだろうか? Oleksii Chepurnyi 2019.10.12 23:31 #78 1.今、別のプロジェクトの 真っ最中なんだ。 2.ライブラリを大幅に変更した ) まあ、ElementBase.mqhとElement.mqhの 変更以外に、すべてのエレメントを調べてみてください、もしかしたらそこにもこれらのメソッドがあるかもしれません。 Andrey Khatimlianskii 2019.10.14 18:20 #79 Oleksii Chepurnyi:ターミナルの新バージョンに関するスレッドで質問した方がいいのでは?そっちの方が早く答えてくれると思う)警告はコンパイラの新しいロジックに適合しているようですが、プライベートメンバーについては理解できません。 そこで回避策を見つけました: 取引、自動取引システム、取引戦略のテストに関するフォーラム MetaTrader 4ビルド1170の新バージョン fxsaber, 2019.09.06 09:39 pm. MT5で提案されているオプションはMT4にも追加されるべき革新的なものだと思います。 しかし、昔ながらの方法でコードを書けば、どこでも機能します。 void Test(const bool test){((A)b).Test(test);} これが私の例の動作です: CC(void) { ((CA)m_b).func(); } しかし、これはもちろん解決策ではありません。 Andrey Khatimlianskii 2019.10.14 18:24 #80 イリヤス、CAに転向しない選択肢はないのか? 12345678910 新しいコメント 取引の機会を逃しています。 無料取引アプリ 8千を超えるシグナルをコピー 金融ニュースで金融マーケットを探索 新規登録 ログイン スペースを含まないラテン文字 このメールにパスワードが送信されます エラーが発生しました Googleでログイン WebサイトポリシーおよびMQL5.COM利用規約に同意します。 新規登録 MQL5.com WebサイトへのログインにCookieの使用を許可します。 ログインするには、ブラウザで必要な設定を有効にしてください。 ログイン/パスワードをお忘れですか? Googleでログイン
ElementBase.mqhファイルを変更しようとしたら、さらに叱られた。
ElementBase.mqhファイルを変更しようとしたら、さらに叱られた。
ElementBase.mqhとElement.mqhの両方を変更する必要があります。
最近のビルドでは、先祖のメソッドが 子孫のメソッドでオーバーロードされて いる場合のために、コンパイラにメッセージを追加しました:
例
この例では、祖先クラス SFoo の func(int) 関数が子孫クラス SBar で呼び出されています。 子クラスには func(double) 関数しかなく、コンパイラは適切なパラメータを持つ関数を継承ツリーから探そうとします。
つまり、MQL5コンパイラは子孫のメソッドをオーバーライドする代わりにオーバーロードを実行するのです。言語開発の初期段階では、MQL5コンパイラのこの緩和は重要視されていませんでした。しかし将来的に変更される可能性があるため、現在ではMQL5プログラムの開発者に対し、コードを考慮し修正するよう明確な警告が出されている。
厳密に言えば、オーバーライドはもう少し広い概念です。オーバーロードとオーバーライドの違いについては、インターネット
。
1.そのようなコードはコンパイルされないということでよろしいでしょうか?
2.このコードは、上記のエラーに加えて、「非推奨の動作、hiddenメソッド呼び出しは将来のMQLコンパイラー・バージョンで無効になります」という警告を 生成するということでよろしいでしょうか? TestCompiler.mq5 27 18。
1.そのようなコードはコンパイルされないということでよろしいでしょうか?
2.このコードは、上記のエラーに加えて、「非推奨の動作、非表示メソッド呼び出しは将来のMQLコンパイラー・バージョンで無効になります」という警告を 発生させますが、正しいですか? TestCompiler.mq5 27 18。
ターミナルの新バージョンに関するスレッドで質問したほうがいいのでは?そちらの方が早く答えてくれると思います。)
警告はコンパイラの新しいロジックに適合しているようですが、プライベート・メンバーについては理解できません。
ElementBase.mqhとElement.mqhの両方を変更する必要がある。
ElementBase.mqhでは、"Is "を "Set "に置き換えたことは明らかだ(しかし、なぜそんなことができるのかは不明だ)。
しかし、Element.mqhには別の行があります。
ElementBase.mqhでは、あなたが "Is "を "Set "に置き換えたことは明らかだ(しかし、なぜそうすることができるのかは不明だ)。
しかし、Element.mqhには別の行があります。
今、MQは同じ名前(変数、メソッドなど)を好みません。)
メソッドの名前を変えただけです。
私たちは何も変えたくありません - 作者がすべてをやり直すのを待ちます ) )
作者はおそらくこのプロジェクトを"終えて "いるのだろうが、コンパイラが悪態をつかないように、どの行に何を書けばいいのか、そしてもちろん、人々のためにオーソドックスな(修正された)ファイル(ElementBase.mqhとElement.mqh)を指定してくれるだろうか?
1.今、別のプロジェクトの 真っ最中なんだ。
2.ライブラリを大幅に変更した )
まあ、ElementBase.mqhとElement.mqhの 変更以外に、すべてのエレメントを調べてみてください、もしかしたらそこにもこれらのメソッドがあるかもしれません。
ターミナルの新バージョンに関するスレッドで質問した方がいいのでは?そっちの方が早く答えてくれると思う)
警告はコンパイラの新しいロジックに適合しているようですが、プライベートメンバーについては理解できません。
そこで回避策を見つけました:
取引、自動取引システム、取引戦略のテストに関するフォーラム
MetaTrader 4ビルド1170の新バージョン
fxsaber, 2019.09.06 09:39 pm.
MT5で提案されているオプションはMT4にも追加されるべき革新的なものだと思います。
しかし、昔ながらの方法でコードを書けば、どこでも機能します。
これが私の例の動作です:
CC(void) { ((CA)m_b).func(); }しかし、これはもちろん解決策ではありません。
イリヤス、CAに転向しない選択肢はないのか?