エラー、バグ、質問 - ページ 759 1...752753754755756757758759760761762763764765766...3185 新しいコメント 削除済み 2012.06.29 11:23 #7581 WWer:では、コピーコンストラクタの役割をオーバーロードされた代入演算子が担うようにすればいいのですね。 何が正しいのか分かりませんが、VSの代入演算 子はコピーコンストラクタの役割を果たしません。class tt { public: int f; tt(tt& u) {f = 1;} // Копирующий конструктор, при выполнении его f == 1 tt(){} void operator=(tt &u){f = 100;} // При выполнении f == 100 }; tt fn() { tt q3; return(q3); } int _tmain(int argc, _TCHAR* argv[]) { tt q2 = fn(); std::cout<<q2.f; char input[54]; std::cin>>input; return 0; }画面には1が表示され、つまりコピー用コンストラクタが実行されています。これだと思うんです。"2)オーバーロードされた代入演算子 でstopをアンコメントする "は、役に立たないはずです。 Ilyas 2012.06.29 11:31 #7582 220Volt: 何が正しいのか分かりませんが、VSの代入演算 子はコピーコンストラクタの役割を果たしません。画面には1が表示されています。つまり、コピーコンストラクタが実行されています。私はこう思います。"2)オーバーロードされた代入演算子 でstopをアンコメントする "は、役に立たないはずです。コピーコンストラクタはここで実行されます tt q2 = fn(); fn()関数の内部ではありません。 削除済み 2012.06.29 11:38 #7583 mql5:コピーコンストラクタはここで実行されます であり、fn()関数の中ではない。このバリアントではclass tt { public: int f; tt(tt& u) {f = 1;} tt(){f = 198;} void operator=(tt &u){f = 100; std::cout<<"Выполнился присваивающий конструктор";} }; tt fn() { tt q3; return(q3); } int _tmain(int argc, _TCHAR* argv[]) { tt q2 = fn(); std::cout<<q2.f; char input[54]; std::cin>>input; return 0; } Assignmentコンストラクタが実行されました」という行が出力されない。 削除済み 2012.06.29 11:42 #7584 という風に推理しています。tt q2; q2 = fn(); WWer、VSとの類推で、具体的な状況を見る必要があるのなら、コピー・割り当ての具体例を挙げてください。何が実行されるかは、その場で決まります。 Vladimir Gomonov 2012.06.29 11:57 #7585 WWer:なぜ初期化する必要があるのですか?そのためのコンストラクタを持つクラスのインスタンスなのです。 ええ、本当に、すみません。また、そのためのコピー用コンストラクタを正しく書くにはどうしたらよいでしょうか。オブジェクトを返そうとする関数getCopy()は、非常に正しく書かれています。代入を上書きした後、それはすでにポインタを返し、エラーは蒸発する。--これは、静的なオブジェクトのフィールドと動的なオブジェクトのフィールドを同じ構文で表現する「構文の抜け道」があるためです(矢印ではなく点で表現します。 ちなみに、これは本当に便利です)。これは非常にありふれたことで、オブジェクトとオブジェクトポインタの区別をやや鈍らせ、その結果、静的(あるいは自動的)なオブジェクト変数に何かを代入できるといった錯覚に陥る可能性があります。それどころか、代入の左側にあるオブジェクト変数は常にポインタである。 コピーコンストラクタが定義されていない場合. Ilyas 2012.06.29 12:27 #7586 残念ながら、ここがMQL5とC++の異なる点です。 C++では、fn()関数の中でq2オブジェクトをリターンとして構築するため、コピーコンストラクタが機能します。MQL5では、オブジェクトは外側から構築されるため、違いがあります。排除しよう。興味のある方へ:戻り値の最適化という ことで 削除済み 2012.06.29 20:55 #7587 同僚たちよ、ごきげんよう。異なる金融商品の価格値を同期して 取得する方法を教えてください。例えば、異なる商品で過去のある時点のバーの終値ということです。CopyClose関数を 使用し、バーのインデックスで 値を取得することは、絶対的に正しいとは言えません。私の記憶では、mql4には時間によるBarShift機能がありますが、mql5にはアナログがあるのでしょうか? Документация по MQL5: Доступ к таймсериям и индикаторам / CopyClose www.mql5.com Доступ к таймсериям и индикаторам / CopyClose - Документация по MQL5 Olegs Kucerenko 2012.06.29 21:20 #7588 時刻がわかっている場合は、この機能を利用することができます。開始日と必要な個数によるアドレス指定intCopyClose( stringsymbol_name,// シンボル名ENUM_TIMEFRAMEStimeframe,// 期間datetimestart_time,// どの時点からdate intcount,// 何個コピー するか doubleclose_array[]// 終値をコピーするための配列); 削除済み 2012.06.29 21:33 #7589 Karlson:時刻がわかっている場合は、この機能を利用することができます。開始時期、必要個数などを参考にするintCopyClose()stringsymbol_name,// シンボル名ENUM_TIMEFRAMEStimeframe,// 期間datetimestart_time,//何時からの ものかintcount です。// 何枚コピー するかdoubleclose_array[]// 終値のコピー用配列);例えば、close[i] EUR/USD と close[i] GBP/USD の比率を求めたいが、インデックス i を使用すると、ミスバーがあるため、いずれにしても時間的に異なるバーとなる可能性があります。つまり、各バーでCopyClose(Symbol, 0, date_of_current_bar,1, array)を周期的に使用しなければならないのでしょうか? Документация по MQL5: Доступ к таймсериям и индикаторам / CopyClose www.mql5.com Доступ к таймсериям и индикаторам / CopyClose - Документация по MQL5 Olegs Kucerenko 2012.06.29 21:44 #7590 古いTFのバーが "消える "ということは、ほとんどないように思います。もう一つのバリエーションは、CopyTime()によってこのバーの時刻を同時に取得することである。そして、3つ目のオプション(おそらく最も簡単)は、CopyRatesを 構造的に一度に使用 することです。 Документация по MQL5: Доступ к таймсериям и индикаторам / CopyRates www.mql5.com Доступ к таймсериям и индикаторам / CopyRates - Документация по MQL5 1...752753754755756757758759760761762763764765766...3185 新しいコメント 取引の機会を逃しています。 無料取引アプリ 8千を超えるシグナルをコピー 金融ニュースで金融マーケットを探索 新規登録 ログイン スペースを含まないラテン文字 このメールにパスワードが送信されます エラーが発生しました Googleでログイン WebサイトポリシーおよびMQL5.COM利用規約に同意します。 新規登録 MQL5.com WebサイトへのログインにCookieの使用を許可します。 ログインするには、ブラウザで必要な設定を有効にしてください。 ログイン/パスワードをお忘れですか? Googleでログイン
では、コピーコンストラクタの役割をオーバーロードされた代入演算子が担うようにすればいいのですね。
画面には1が表示され、つまりコピー用コンストラクタが実行されています。
これだと思うんです。"2)オーバーロードされた代入演算子 でstopをアンコメントする "は、役に立たないはずです。
何が正しいのか分かりませんが、VSの代入演算 子はコピーコンストラクタの役割を果たしません。
画面には1が表示されています。つまり、コピーコンストラクタが実行されています。
私はこう思います。"2)オーバーロードされた代入演算子 でstopをアンコメントする "は、役に立たないはずです。
コピーコンストラクタはここで実行されます
fn()関数の内部ではありません。コピーコンストラクタはここで実行されます
であり、fn()関数の中ではない。このバリアントでは
Assignmentコンストラクタが実行されました」という行が出力されない。という風に推理しています。
WWer、VSとの類推で、具体的な状況を見る必要があるのなら、コピー・割り当ての具体例を挙げてください。何が実行されるかは、その場で決まります。なぜ初期化する必要があるのですか?そのためのコンストラクタを持つクラスのインスタンスなのです。
また、そのためのコピー用コンストラクタを正しく書くにはどうしたらよいでしょうか。
オブジェクトを返そうとする関数getCopy()は、非常に正しく書かれています。代入を上書きした後、それはすでにポインタを返し、エラーは蒸発する。
--
これは、静的なオブジェクトのフィールドと動的なオブジェクトのフィールドを同じ構文で表現する「構文の抜け道」があるためです(矢印ではなく点で表現します。 ちなみに、これは本当に便利です)。これは非常にありふれたことで、オブジェクトとオブジェクトポインタの区別をやや鈍らせ、その結果、静的(あるいは自動的)なオブジェクト変数に何かを代入できるといった錯覚に陥る可能性があります。それどころか、代入の左側にあるオブジェクト変数は常にポインタである。 コピーコンストラクタが定義されていない場合.
C++では、fn()関数の中でq2オブジェクトをリターンとして構築するため、コピーコンストラクタが機能します。
MQL5では、オブジェクトは外側から構築されるため、違いがあります。排除しよう。
興味のある方へ:戻り値の最適化という ことで
同僚たちよ、ごきげんよう。
異なる金融商品の価格値を同期して 取得する方法を教えてください。例えば、異なる商品で過去のある時点のバーの終値ということです。CopyClose関数を 使用し、バーのインデックスで 値を取得することは、絶対的に正しいとは言えません。私の記憶では、mql4には時間によるBarShift機能がありますが、mql5にはアナログがあるのでしょうか?
時刻がわかっている場合は、この機能を利用することができます。
開始日と必要な個数によるアドレス指定
intCopyClose(
stringsymbol_name,// シンボル名
ENUM_TIMEFRAMEStimeframe,// 期間
datetimestart_time,// どの時点からdate
intcount,// 何個コピー するか
doubleclose_array[]// 終値をコピーするための配列
);
時刻がわかっている場合は、この機能を利用することができます。
開始時期、必要個数などを参考にする
intCopyClose()
stringsymbol_name,// シンボル名
ENUM_TIMEFRAMEStimeframe,// 期間
datetimestart_time,//何時からの ものか
intcount です。// 何枚コピー するか
doubleclose_array[]// 終値のコピー用配列
);
例えば、close[i] EUR/USD と close[i] GBP/USD の比率を求めたいが、インデックス i を使用すると、ミスバーがあるため、いずれにしても時間的に異なるバーとなる可能性があります。
つまり、各バーでCopyClose(Symbol, 0, date_of_current_bar,1, array)を周期的に使用しなければならないのでしょうか?
古いTFのバーが "消える "ということは、ほとんどないように思います。
もう一つのバリエーションは、CopyTime()によってこのバーの時刻を同時に取得することである。
そして、3つ目のオプション(おそらく最も簡単)は、CopyRatesを 構造的に一度に使用 することです。