MQL5におけるOOPに関する質問 - ページ 19 1...121314151617181920212223242526...96 新しいコメント Igor Makanu 2019.08.29 08:46 #181 Vladimir Simakov: 例えば0.15など、ロットがない前提で考えています。少なくとも私は聞いたことがありません。もしそうなら、変えます。 ありえないとは思いますが、いつも完璧な解答を求めますよね )))) OK、最大の問題ではないのですが、自分で問題を作ってしまいました......。完璧なOOPが欲しかったが、不必要な呼び出しがなく、すべてが最適だった クラスのインスタンスを5つ作りたいのですが、クラスのフィールドは一度だけ初期化する必要があります - これらは端末環境を含んでおり、プログラムの実行中に変わることはありません。 string Language; static string Language; - と宣言すると、unresolved static variable 'A::Language' というエラーが発生します。 以下はその一例です。 //+------------------------------------------------------------------+ class A { public: string Language; A() { Print(__FUNCTION__); Language = TerminalInfoString(TERMINAL_LANGUAGE); } }; //+------------------------------------------------------------------+ class B:public A { public: B() {Print(__FUNCTION__,Language); } }; //+------------------------------------------------------------------+ B *arrB[5]; //+------------------------------------------------------------------+ int OnInit() { for(int i=0; i<5; i++) arrB[i] = new B; return(INIT_SUCCEEDED); } このフォームで文字列Languageを5回初期化する - これは間違っており、静的な修飾子で コンパイルされません と、Language変数を5つも用意する必要はないのです- Bクラスでクラスのインスタンスを宣言してみた - 同じこと 5 言語変数が持つ 2019.08.29 12:44:58.384 tst__ EURUSD,M15:初期化されました。 2019.08.29 12:44:58.384 tst__ EURUSD,M15: B::BRussian 2019.08.29 12:44:58.384 tst__ EURUSD,M15: A::A 2019.08.29 12:44:58.384 tst__ EURUSD,M15: B::BRussian 2019.08.29 12:44:58.384 tst__ EURUSD,M15: A::A 2019.08.29 12:44:58.384 tst__ EURUSD,M15: B::BRussian 2019.08.29 12:44:58.384 tst__ EURUSD,M15: A::A 2019.08.29 12:44:58.384 tst__ EURUSD,M15: B::BRussian 2019.08.29 12:44:58.384 tst__ EURUSD,M15: A::A 2019.08.29 12:44:58.384 tst__ EURUSD,M15: B::BRussian 2019.08.29 12:44:58.384 tst__ EURUSD,M15: A::A 2019.08.29 12:44:57.989 tst__ EURUSD,M30: uninit reason 3 Questions on OOP in Weekly performance Weekly Winners Andrey Barinov 2019.08.29 08:51 #182 Igor Makanu: ありえないとは思いますが、いつも完璧な解答を求めますよね )))) OK、最大の問題ではないのですが、自分で問題を作ってしまいました......。完璧なOOPが欲しかったが、不必要な呼び出しがなく、すべてが最適だった クラスのインスタンスを5つ作りたいのですが、クラスのフィールドを一回だけ初期化する必要があります - これには端末環境が含まれており、プログラムの実行中に変わることはありません。 static string Language; - と宣言すると、unresolved static variable 'A::Language' というエラーが発生します。 以下はその一例です。 このフォームで文字列Languageを5回初期化する - 正しくありませんし、静的修飾子で コンパイルされません 2019.08.29 12:44:58.384 tst__ EURUSD,M15:初期化されました。 2019.08.29 12:44:58.384 tst__ EURUSD,M15: B::BRussian 2019.08.29 12:44:58.384 tst__ EURUSD,M15: A::A 2019.08.29 12:44:58.384 tst__ EURUSD,M15: B::BRussian 2019.08.29 12:44:58.384 tst__ EURUSD,M15: A::A 2019.08.29 12:44:58.384 tst__ EURUSD,M15: B::BRussian 2019.08.29 12:44:58.384 tst__ EURUSD,M15: A::A 2019.08.29 12:44:58.384 tst__ EURUSD,M15: B::BRussian 2019.08.29 12:44:58.384 tst__ EURUSD,M15: A::A 2019.08.29 12:44:58.384 tst__ EURUSD,M15: B::BRussian 2019.08.29 12:44:58.384 tst__ EURUSD,M15: A::A 2019.08.29 12:44:57.989 tst__ EURUSD,M30: uninit reason 3 class Test { private: static const string Language; public: Test(void){} ~Test(void){} }; static const string Test::Language=::TerminalInfoString(TERMINAL_LANGUAGE); Igor Makanu 2019.08.29 08:54 #183 Andrey Barinov: なるほど、そういう手もあるのか しかし、すべてを1つのクラスにまとめたい。私の例では、クラスBがあり、Bのインスタンスが5つ欲しい。しかし、Languageを 5回も初期化したくないので、各インスタンスにLanguage変数を持ち たくない。 余分なLanguageを取り除くにはどうしたらよいですか? Andrey Barinov 2019.08.29 08:57 #184 Igor Makanu: なるほど、そういう手もあるのか しかし、すべてを1つのクラスにまとめたい。私の例では、クラスBがあり、Bのインスタンスが5つ欲しい。しかし、 Languageを 5回も初期化 したくないので、各インスタンスにLanguage 変数を持ち たくない。 余分なLanguageを取り除くにはどうしたらいいですか? 継承する。こうすることで、一度だけ初期化されることになります。 Vladimir Simakov 2019.08.29 09:22 #185 Igor Makanu: ありえないとは思いますが、いつも完璧な解答を求めますよね )))) まあ、一番の問題ではないのですが、自分で問題を作ってしまったので......。完璧なOOPが欲しかったが、不必要な呼び出しがなく、すべてが最適だった クラスのインスタンスを5つ作りたいのですが、クラスのフィールドは一度だけ初期化する必要があります - これらは端末環境を含んでおり、プログラムの実行中に変わることはありません。 static string Language; - と宣言すると、unresolved static variable 'A::Language' というエラーが発生します。 以下はその一例です。 このフォームで文字列Languageを5回初期化する - これは間違っており、静的な修飾子で コンパイルされません と、Language変数を5つも用意する必要はないのです- Bクラスでクラスのインスタンスを宣言してみた - 同じこと 5 言語変数が持つ 2019.08.29 12:44:58.384 tst__ EURUSD,M15:初期化されました。 2019.08.29 12:44:58.384 tst__ EURUSD,M15: B::BRussian 2019.08.29 12:44:58.384 tst__ EURUSD,M15: A::A 2019.08.29 12:44:58.384 tst__ EURUSD,M15: B::BRussian 2019.08.29 12:44:58.384 tst__ EURUSD,M15: A::A 2019.08.29 12:44:58.384 tst__ EURUSD,M15: B::BRussian 2019.08.29 12:44:58.384 tst__ EURUSD,M15: A::A 2019.08.29 12:44:58.384 tst__ EURUSD,M15: B::BRussian 2019.08.29 12:44:58.384 tst__ EURUSD,M15: A::A 2019.08.29 12:44:58.384 tst__ EURUSD,M15: B::BRussian 2019.08.29 12:44:58.384 tst__ EURUSD,M15: A::A 2019.08.29 12:44:57.989 tst__ EURUSD,M30: uninit reason 3 今、携帯電話からです。夕方になったら思い出して、解き方を教えてあげるよ。 Igor Makanu 2019.08.29 09:27 #186 Andrey Barinov: 継承する。本形態では、一度だけ初期化されます。 私のための作品 //+------------------------------------------------------------------+ string MyTerminalInfoString() { Print(__FUNCTION__); return("ru"); } //+------------------------------------------------------------------+ class CLang { protected: static const string Language; public: CLang(void) {Print(__FUNCTION__);} ~CLang(void) {} }; //+------------------------------------------------------------------+ static const string CLang::Language=MyTerminalInfoString(); //+------------------------------------------------------------------+ class B:public CLang { public: B() {Print(__FUNCTION__,Language); } }; //+------------------------------------------------------------------+ B *arrB[5]; //+------------------------------------------------------------------+ int OnInit() { for(int i=0; i<5; i++) arrB[i] = new B; return(INIT_SUCCEEDED); } 2019.08.29 13:24:19.690 tst__ EURUSD,M15:初期化されました。 2019.08.29 13:24:19.690 tst__ EURUSD,M15: B::Bru 2019.08.29 13:24:19.690 tst__ EURUSD,M15: CLang::CLang 2019.08.29 13:24:19.690 tst__ EURUSD,M15: B::Bru 2019.08.29 13:24:19.690 tst__ EURUSD,M15: CLang::CLang 2019.08.29 13:24:19.690 tst__ EURUSD,M15: B::Bru 2019.08.29 13:24:19.690 tst__ EURUSD,M15: CLang::CLang 2019.08.29 13:24:19.690 tst__ EURUSD,M15: B::Bru 2019.08.29 13:24:19.690 tst__ EURUSD,M15: CLang::CLang 2019.08.29 13:24:19.690 tst__ EURUSD,M15: B::Bru 2019.08.29 13:24:19.690 tst__ EURUSD,M15: CLang::CLang 2019.08.29 13:24:19.690 tst__ EURUSD,M15: MyTerminalInfoString 少なくとも myTerminalInfoString() が一度だけ呼ばれる。 だから、なんとなくシングルトンを手に入れた ありがとうございました。 Igor Makanu 2019.08.29 09:28 #187 Vladimir Simakov: 今、携帯電話からです。夕方になったら思い出して、解き方を教えてあげるよ。 面倒でなければOKです。 また、Singletonのテーマは私にとってかなり新しいもので、創造の余地があります。 Vladimir Simakov 2019.08.29 10:13 #188 Igor Makanu: 面倒でなければOKです。 また、Singletonのテーマは私にとってかなり新しいもので、創造の余地があります。 では、シングルトンがいいのか、それともオブジェクト用の一般的なフィールドがいいのか? Igor Makanu 2019.08.29 10:27 #189 Vladimir Simakov: では、オブジェクトの共通フィールドは必要なのでしょうか? とは言い難いのですが )))) 言葉にしてみます。 - コンストラクタで初期化されるクラスが欲しいのですが、このクラスはメソッドを持ちません。 - クラスのインスタンスの配列を使用します - 少なくとも5つ - いちいち端末環境を呼び出さないと注文が開けないのは困る。 そこで、SYMBOL_VOLUME_MAX、Symbol、SYMBOL_VOLUME_MIN、SYMBOL_VOLUME_STEPの桁数を定数値としてクラスで使用したい。 - 変数を最適に使いたい、つまり前の段落の定数と重複しないようにしたい。 それは私がそれをすべて見る方法についてですが、一般的に、問題は今、クラス自体の正しい構造に低減され、それはすでに継承する必要が判明したとして、そのSYMBOL_VOLUME_MAX 、シンボル、 SYMBOL_VOLUME_MIN...です。を1つ持っていると、やはりエラー出力でつまずくと思うので、私のPrintLastError.mqhhttps://www.mql5.com/ru/code/24829# から以下のようなものを使用する予定です。 Koldun Zloy 2019.08.29 10:56 #190 静的 変数は、たとえ継承がなくても、すべてのインスタンスで同じになります。 1...121314151617181920212223242526...96 新しいコメント 取引の機会を逃しています。 無料取引アプリ 8千を超えるシグナルをコピー 金融ニュースで金融マーケットを探索 新規登録 ログイン スペースを含まないラテン文字 このメールにパスワードが送信されます エラーが発生しました Googleでログイン WebサイトポリシーおよびMQL5.COM利用規約に同意します。 新規登録 MQL5.com WebサイトへのログインにCookieの使用を許可します。 ログインするには、ブラウザで必要な設定を有効にしてください。 ログイン/パスワードをお忘れですか? Googleでログイン
例えば0.15など、ロットがない前提で考えています。少なくとも私は聞いたことがありません。もしそうなら、変えます。
ありえないとは思いますが、いつも完璧な解答を求めますよね ))))
OK、最大の問題ではないのですが、自分で問題を作ってしまいました......。完璧なOOPが欲しかったが、不必要な呼び出しがなく、すべてが最適だった
クラスのインスタンスを5つ作りたいのですが、クラスのフィールドは一度だけ初期化する必要があります - これらは端末環境を含んでおり、プログラムの実行中に変わることはありません。
string Language;
static string Language; - と宣言すると、unresolved static variable 'A::Language' というエラーが発生します。
以下はその一例です。
このフォームで文字列Languageを5回初期化する - これは間違っており、静的な修飾子で コンパイルされません
と、Language変数を5つも用意する必要はないのです- Bクラスでクラスのインスタンスを宣言してみた - 同じこと 5 言語変数が持つ
2019.08.29 12:44:58.384 tst__ EURUSD,M15:初期化されました。
2019.08.29 12:44:58.384 tst__ EURUSD,M15: B::BRussian
2019.08.29 12:44:58.384 tst__ EURUSD,M15: A::A
2019.08.29 12:44:58.384 tst__ EURUSD,M15: B::BRussian
2019.08.29 12:44:58.384 tst__ EURUSD,M15: A::A
2019.08.29 12:44:58.384 tst__ EURUSD,M15: B::BRussian
2019.08.29 12:44:58.384 tst__ EURUSD,M15: A::A
2019.08.29 12:44:58.384 tst__ EURUSD,M15: B::BRussian
2019.08.29 12:44:58.384 tst__ EURUSD,M15: A::A
2019.08.29 12:44:58.384 tst__ EURUSD,M15: B::BRussian
2019.08.29 12:44:58.384 tst__ EURUSD,M15: A::A
2019.08.29 12:44:57.989 tst__ EURUSD,M30: uninit reason 3
ありえないとは思いますが、いつも完璧な解答を求めますよね ))))
OK、最大の問題ではないのですが、自分で問題を作ってしまいました......。完璧なOOPが欲しかったが、不必要な呼び出しがなく、すべてが最適だった
クラスのインスタンスを5つ作りたいのですが、クラスのフィールドを一回だけ初期化する必要があります - これには端末環境が含まれており、プログラムの実行中に変わることはありません。
static string Language; - と宣言すると、unresolved static variable 'A::Language' というエラーが発生します。
以下はその一例です。
このフォームで文字列Languageを5回初期化する - 正しくありませんし、静的修飾子で コンパイルされません
2019.08.29 12:44:58.384 tst__ EURUSD,M15:初期化されました。
2019.08.29 12:44:58.384 tst__ EURUSD,M15: B::BRussian
2019.08.29 12:44:58.384 tst__ EURUSD,M15: A::A
2019.08.29 12:44:58.384 tst__ EURUSD,M15: B::BRussian
2019.08.29 12:44:58.384 tst__ EURUSD,M15: A::A
2019.08.29 12:44:58.384 tst__ EURUSD,M15: B::BRussian
2019.08.29 12:44:58.384 tst__ EURUSD,M15: A::A
2019.08.29 12:44:58.384 tst__ EURUSD,M15: B::BRussian
2019.08.29 12:44:58.384 tst__ EURUSD,M15: A::A
2019.08.29 12:44:58.384 tst__ EURUSD,M15: B::BRussian
2019.08.29 12:44:58.384 tst__ EURUSD,M15: A::A
2019.08.29 12:44:57.989 tst__ EURUSD,M30: uninit reason 3
なるほど、そういう手もあるのか
しかし、すべてを1つのクラスにまとめたい。私の例では、クラスBがあり、Bのインスタンスが5つ欲しい。しかし、Languageを 5回も初期化したくないので、各インスタンスにLanguage変数を持ち たくない。
余分なLanguageを取り除くにはどうしたらよいですか?
なるほど、そういう手もあるのか
しかし、すべてを1つのクラスにまとめたい。私の例では、クラスBがあり、Bのインスタンスが5つ欲しい。しかし、 Languageを 5回も初期化 したくないので、各インスタンスにLanguage 変数を持ち たくない。
余分なLanguageを取り除くにはどうしたらいいですか?
継承する。こうすることで、一度だけ初期化されることになります。
ありえないとは思いますが、いつも完璧な解答を求めますよね ))))
まあ、一番の問題ではないのですが、自分で問題を作ってしまったので......。完璧なOOPが欲しかったが、不必要な呼び出しがなく、すべてが最適だった
クラスのインスタンスを5つ作りたいのですが、クラスのフィールドは一度だけ初期化する必要があります - これらは端末環境を含んでおり、プログラムの実行中に変わることはありません。
static string Language; - と宣言すると、unresolved static variable 'A::Language' というエラーが発生します。
以下はその一例です。
このフォームで文字列Languageを5回初期化する - これは間違っており、静的な修飾子で コンパイルされません
と、Language変数を5つも用意する必要はないのです- Bクラスでクラスのインスタンスを宣言してみた - 同じこと 5 言語変数が持つ
2019.08.29 12:44:58.384 tst__ EURUSD,M15:初期化されました。
2019.08.29 12:44:58.384 tst__ EURUSD,M15: B::BRussian
2019.08.29 12:44:58.384 tst__ EURUSD,M15: A::A
2019.08.29 12:44:58.384 tst__ EURUSD,M15: B::BRussian
2019.08.29 12:44:58.384 tst__ EURUSD,M15: A::A
2019.08.29 12:44:58.384 tst__ EURUSD,M15: B::BRussian
2019.08.29 12:44:58.384 tst__ EURUSD,M15: A::A
2019.08.29 12:44:58.384 tst__ EURUSD,M15: B::BRussian
2019.08.29 12:44:58.384 tst__ EURUSD,M15: A::A
2019.08.29 12:44:58.384 tst__ EURUSD,M15: B::BRussian
2019.08.29 12:44:58.384 tst__ EURUSD,M15: A::A
2019.08.29 12:44:57.989 tst__ EURUSD,M30: uninit reason 3
継承する。本形態では、一度だけ初期化されます。
私のための作品
2019.08.29 13:24:19.690 tst__ EURUSD,M15:初期化されました。
2019.08.29 13:24:19.690 tst__ EURUSD,M15: B::Bru
2019.08.29 13:24:19.690 tst__ EURUSD,M15: CLang::CLang
2019.08.29 13:24:19.690 tst__ EURUSD,M15: B::Bru
2019.08.29 13:24:19.690 tst__ EURUSD,M15: CLang::CLang
2019.08.29 13:24:19.690 tst__ EURUSD,M15: B::Bru
2019.08.29 13:24:19.690 tst__ EURUSD,M15: CLang::CLang
2019.08.29 13:24:19.690 tst__ EURUSD,M15: B::Bru
2019.08.29 13:24:19.690 tst__ EURUSD,M15: CLang::CLang
2019.08.29 13:24:19.690 tst__ EURUSD,M15: B::Bru
2019.08.29 13:24:19.690 tst__ EURUSD,M15: CLang::CLang
2019.08.29 13:24:19.690 tst__ EURUSD,M15: MyTerminalInfoString
少なくとも myTerminalInfoString() が一度だけ呼ばれる。
だから、なんとなくシングルトンを手に入れた
ありがとうございました。
今、携帯電話からです。夕方になったら思い出して、解き方を教えてあげるよ。
面倒でなければOKです。
また、Singletonのテーマは私にとってかなり新しいもので、創造の余地があります。
面倒でなければOKです。
また、Singletonのテーマは私にとってかなり新しいもので、創造の余地があります。
では、オブジェクトの共通フィールドは必要なのでしょうか?
とは言い難いのですが ))))
言葉にしてみます。
- コンストラクタで初期化されるクラスが欲しいのですが、このクラスはメソッドを持ちません。
- クラスのインスタンスの配列を使用します - 少なくとも5つ
- いちいち端末環境を呼び出さないと注文が開けないのは困る。 そこで、SYMBOL_VOLUME_MAX、Symbol、SYMBOL_VOLUME_MIN、SYMBOL_VOLUME_STEPの桁数を定数値としてクラスで使用したい。
- 変数を最適に使いたい、つまり前の段落の定数と重複しないようにしたい。
それは私がそれをすべて見る方法についてですが、一般的に、問題は今、クラス自体の正しい構造に低減され、それはすでに継承する必要が判明したとして、そのSYMBOL_VOLUME_MAX 、シンボル、 SYMBOL_VOLUME_MIN...です。を1つ持っていると、やはりエラー出力でつまずくと思うので、私のPrintLastError.mqhhttps://www.mql5.com/ru/code/24829# から以下のようなものを使用する予定です。