MQL5におけるOOPに関する質問 - ページ 81 1...747576777879808182838485868788...96 新しいコメント Igor Makanu 2020.06.13 16:52 #801 キャスティングに関するもう一つの質問 このコードがあります。 struct SHash { ulong hash[2]; SHash() { } SHash(const double) { ArrayInitialize(hash, 0xAAAAAAAAAAAAAAAA); } SHash(const SHash &val) { ArrayCopy(hash, val.hash); } bool operator==(const SHash &val)const { return(hash[0] == val.hash[0] && hash[1] == val.hash[1]); } }; //+------------------------------------------------------------------+ class BASE { private: const SHash _hash; protected: BASE(SHash &hash): _hash(hash) { } }; class A:BASE { public: A(SHash &hash):BASE(hash) { } }; class B:BASE { public: B():BASE((SHash)0.0) { } }; //+------------------------------------------------------------------+ void OnStart() { SHash h(0.0); A a(h); } //+------------------------------------------------------------------+ で、クラス B をパラメータなしのコンストラクタで初期化したいのですが、SHash 構造体をコンストラクタ SHash(const double) にキャストできないのです。 つまり、キャスティング(SHash)ダブルが必要です。 この例では、コンパイラーエラーが発生します: '(SHash)' - invalid cast operation このように書くと class B:BASE { public: B():BASE(0.0) { } }; error: '0.0' - パラメータは参照として渡され、変数は を期待する。 Vladimir Simakov 2020.06.13 16:57 #802 Igor Makanu:キャスティングに関するもう一つの質問このコードがあります。で、クラス B をパラメータなしのコンストラクタで初期化したいのですが、SHash 構造体をコンストラクタ SHash(const double) にキャストできないのです。つまり、キャスティング(SHash)ダブルが必要です。この例では、コンパイラーエラーが発生します: '(SHash)' - invalid cast operationこのように書くとerror: '0.0' - パラメータは参照として渡され、変数は を期待する。 class B:BASE { public: B():BASE(SHash()) { } }; Igor Makanu 2020.06.13 17:06 #803 Vladimir Simakov: こうなる しかし、SHash構造体には0xAAAAAAAA初期化が必要 - これはある種のNULL - テスト文字列からMD5ハッシュを取得できない (確認済み) SHash()コンストラクタは、今は必要ないようですが、数日前は必要だったようです )))で、最初はなかったんだけど、この空のコンストラクタとか、構造体の比較時とか、初期化時とか、どこかのコンパイル エラーを修正したんだけど...。蓋然性が高いすべての変数を初期化するのが鉄則のようですが......。 一般的に、私は、私は、バリアントまたは曖昧でないを持っていた希望 - いいえ ))) 。) Vladimir Simakov 2020.06.13 17:11 #804 Igor Makanu:こうなるしかし、SHash構造体には0xAAAAAAAA初期化が必要 - これはある種のNULL - テスト文字列からMD5ハッシュを取得できない (確認済み)SHash()コンストラクタは、今は必要ないようですが、数日前は必要だったようです )))で、最初はなかったんだけど、この空のコンストラクタとか、構造体の比較時とか、初期化時とか、どこかのコンパイル エラーを修正したんだけど...。蓋然性が高いすべての変数を初期化するのが鉄則のようですが......。一般的に、私は、私は、バリアントまたは曖昧でないを持っていた希望 - いいえ ))) 。 SHash(0.0) が、自分で当てるのか(笑))) Alexandr Andreev 2020.06.13 17:14 #805 Vladimir Simakov:が、自分で推測するのか?) SHash((double)x) Igor Makanu 2020.06.13 17:15 #806 Vladimir Simakov:と自分で推測するのか))) class B:BASE { public: B():BASE(SHash(0.0)) { } }; やばい、効いてる! 私もその方法でやってみたと思うのですが、なぜかうまくいかなかったんです。 ありがとうございます。 悪い意味でメチャクチャ(( Vladimir Simakov 2020.06.13 17:18 #807 Alexandr Andreev: そうだ、クラスのコンストラクタで xを取得するのはどこなんだ?) Alexandr Andreev 2020.06.13 17:19 #808 Vladimir Simakov:そうだ、クラスのコンストラクタで xを取得するのはどこなんだ?) ポイントは、x)ではなく、受信側に浮きがある可能性があること、0.0だけでは信頼性がないことです。 Alexandr Andreev 2020.06.13 17:21 #809 Alexandr Andreev:ポイントはx)ではなく、受信機にはdubleの他にfloatが存在する可能性があり、0.0だけを指定するのも信頼性がないことです とはいえ、こんな細かいことまで......。然程重要でない Igor Makanu 2020.06.13 17:23 #810 Alexandr Andreev:というのは、xのことではなく、dubleの受信には浮きがあるので、0.0だけを指定するのも信頼性がない。 そこで何を初期化するかは問題ではなく、int でもよい - このコンストラクタを呼び出すための任意の数 と、誤植を避けるために0.0を選びました。どんな数字でも、つまり0.0. は123より書きにくく、誤植しにくいのです。 1...747576777879808182838485868788...96 新しいコメント 取引の機会を逃しています。 無料取引アプリ 8千を超えるシグナルをコピー 金融ニュースで金融マーケットを探索 新規登録 ログイン スペースを含まないラテン文字 このメールにパスワードが送信されます エラーが発生しました Googleでログイン WebサイトポリシーおよびMQL5.COM利用規約に同意します。 新規登録 MQL5.com WebサイトへのログインにCookieの使用を許可します。 ログインするには、ブラウザで必要な設定を有効にしてください。 ログイン/パスワードをお忘れですか? Googleでログイン
キャスティングに関するもう一つの質問
このコードがあります。
で、クラス B をパラメータなしのコンストラクタで初期化したいのですが、SHash 構造体をコンストラクタ SHash(const double) にキャストできないのです。
つまり、キャスティング(SHash)ダブルが必要です。
この例では、コンパイラーエラーが発生します: '(SHash)' - invalid cast operation
このように書くと
キャスティングに関するもう一つの質問
このコードがあります。
で、クラス B をパラメータなしのコンストラクタで初期化したいのですが、SHash 構造体をコンストラクタ SHash(const double) にキャストできないのです。
つまり、キャスティング(SHash)ダブルが必要です。
この例では、コンパイラーエラーが発生します: '(SHash)' - invalid cast operation
このように書くと
こうなる
しかし、SHash構造体には0xAAAAAAAA初期化が必要 - これはある種のNULL - テスト文字列からMD5ハッシュを取得できない (確認済み)
SHash()コンストラクタは、今は必要ないようですが、数日前は必要だったようです )))で、最初はなかったんだけど、この空のコンストラクタとか、構造体の比較時とか、初期化時とか、どこかのコンパイル エラーを修正したんだけど...。蓋然性が高いすべての変数を初期化するのが鉄則のようですが......。
一般的に、私は、私は、バリアントまたは曖昧でないを持っていた希望 - いいえ ))) 。)
こうなる
しかし、SHash構造体には0xAAAAAAAA初期化が必要 - これはある種のNULL - テスト文字列からMD5ハッシュを取得できない (確認済み)
SHash()コンストラクタは、今は必要ないようですが、数日前は必要だったようです )))で、最初はなかったんだけど、この空のコンストラクタとか、構造体の比較時とか、初期化時とか、どこかのコンパイル エラーを修正したんだけど...。蓋然性が高いすべての変数を初期化するのが鉄則のようですが......。
一般的に、私は、私は、バリアントまたは曖昧でないを持っていた希望 - いいえ ))) 。
が、自分で当てるのか(笑)))
が、自分で推測するのか?)
SHash((double)x)
と自分で推測するのか)))
やばい、効いてる!
私もその方法でやってみたと思うのですが、なぜかうまくいかなかったんです。
ありがとうございます。
悪い意味でメチャクチャ((
そうだ、クラスのコンストラクタで xを取得するのはどこなんだ?)
そうだ、クラスのコンストラクタで xを取得するのはどこなんだ?)
ポイントは、x)ではなく、受信側に浮きがある可能性があること、0.0だけでは信頼性がないことです。
ポイントはx)ではなく、受信機にはdubleの他にfloatが存在する可能性があり、0.0だけを指定するのも信頼性がないことです
とはいえ、こんな細かいことまで......。然程重要でない
というのは、xのことではなく、dubleの受信には浮きがあるので、0.0だけを指定するのも信頼性がない。
そこで何を初期化するかは問題ではなく、int でもよい - このコンストラクタを呼び出すための任意の数
と、誤植を避けるために0.0を選びました。どんな数字でも、つまり0.0. は123より書きにくく、誤植しにくいのです。