エラー、バグ、質問 - ページ 2663 1...265626572658265926602661266226632664266526662667266826692670...3185 新しいコメント Viktor Levchenko 2020.03.01 19:22 #26621 株式市場の計算に重大なバグがあるのに気にしていない、問題が意図的に気づかれないのか偶然なのか不明である Aleksey Vyazmikin 2020.03.01 20:46 #26622 Aleksey Vyazmikin: 私の場合は、使えるロジックがないのが辛いところです。 これらの入力を持つ関数があります。 そのため、このFunctionは時々769という値を出力します。 最初のプリントをアンコメントすると とすると、正しい値が表示されます。 エラーが発生した瞬間に関数が呼び出さ れた時点でアクティブになっていないコードだけを削除して関数を切り詰めると、エラーも発生しない。 明らかにコンパイラのエラーです。開発者の皆さん、この関数の全文を誰に送ればいいのでしょうか? スイッチを通してやったが、すべてうまくいった。それなら、コンパイラのせいでしょう。 削除済み 2020.03.02 10:30 #26623 ストレージにコミットできない... Artyom Trishkin 2020.03.02 11:00 #26624 Alexey Kozitsyn: ストレージにコミットできない... すでに効果が出ているのだと思います。 削除済み 2020.03.02 11:01 #26625 Artyom Trishkin: すでに効果が出ているのだと思います。 はい。 Sergey Dzyublik 2020.03.02 17:29 #26626 MT5のバグ(build 2345)、以前説明したバグの 別の現れで、テンプレート関数に渡されたポインタが、ある操作ではデータ型ポインタとして、他の操作ではデータ型クラスとして動作します。 #define PRINT(x) ; Print(#x, ":", string(x)) template<typename T> T test(T ptr){ PRINT(typename(ptr)); // A* PRINT(typename(T)); // A* T new_ptr = new T(); return (new_ptr); } class A{}; void OnStart(){ A a; test(&a); // Compile Error: OK } Sergey Dzyublik 2020.03.02 17:51 #26627 バグMT5 (build 2345)、テンプレートクラス内でテンプレート関数を宣言する際に、再利用されるテンプレート型名がチェックされず、予期せぬ動作をする。 #define PRINT(x) ; Print(#x, ":", string(x)) template<typename T> class A{ public: template<typename T> // Compile Error: OK T test(T p){ B b = NULL; PRINT(typename(B)); // C* PRINT(typename(b)); // C* return b; } //real template template<typename TT> TT test_real(TT p){ TT b = NULL; PRINT(typename(TT)); PRINT(typename(b)); return b; } }; class B{}; class C : public B{}; void OnStart(){ A<B> a; B b; C c; C* c_ptr = a.test(&c); } Sergey Dzyublik 2020.03.02 18:17 #26628 MT5 (build 2345)で、テンプレートクラスのメソッドを 使用する際にカプセル化が欠落する不具合。 class B{ private: template<typename T> void you_cannot_call_private_method(T n){ printf("Wow, Nice job."); } }; void OnStart(){ B b; b.you_cannot_call_private_method(1); // Wow, Nice job. } Sergey Dzyublik 2020.03.02 18:50 #26629 MT5 のバグ(ビルド 2345)において、基底クラスのコンストラクタで、基底クラスのオブジェクトへのポインタを親クラスへのポインタにキャストするための明示的な型キャストを実行できない。 #define PRINT(x) ; Print(#x, ":", string(x)) template<typename T> class A{ T* virtual_call; public: A(T* ptr){ virtual_call = dynamic_cast<T*>(&this); PRINT(virtual_call == NULL); // true, virtual_call == NULL virtual_call = dynamic_cast<T*>(ptr); PRINT(virtual_call == NULL); // false, virtual_call != NULL virtual_call = (T*)(&this); // Execution Error: Incorrect casting of pointers. virtual_call = (T*)(ptr); // OK } template<typename TT> void test(TT n){ virtual_call.__test(n); } template<typename TT> void __test(TT n){ printf("AAAA"); } }; class B : public A<B>{ public: B() : A(&this){} template<typename TT> void __test(TT n){ printf("BBBB"); } }; class C : public A<C>{ public: C() : A(&this){} }; void OnStart(){ B b; b.test(1); // should be "BBBB" C c; c.test(1); // should be "AAAA" } 仮想テンプレート関数の「パターン」エミュレーションを実装するには、型継承の他に、親クラスへのポインタの直接値をベースクラスに引き込む必要があることが判明し、これはまずい...と思いました。 Stanislav Korotky 2020.03.03 11:42 #26630 どなたか、これをコンパイルされた方はいらっしゃいますか? class B {}; template<typename T> class A { static T *array; static void check() { T *ptr = array; // unresolved static variable 'A<B>::array' } }; class Y: public A<B> { }; template<typename T> static T *A::array; void OnStart() { Y y; } どうしたんですか? 1...265626572658265926602661266226632664266526662667266826692670...3185 新しいコメント 取引の機会を逃しています。 無料取引アプリ 8千を超えるシグナルをコピー 金融ニュースで金融マーケットを探索 新規登録 ログイン スペースを含まないラテン文字 このメールにパスワードが送信されます エラーが発生しました Googleでログイン WebサイトポリシーおよびMQL5.COM利用規約に同意します。 新規登録 MQL5.com WebサイトへのログインにCookieの使用を許可します。 ログインするには、ブラウザで必要な設定を有効にしてください。 ログイン/パスワードをお忘れですか? Googleでログイン
私の場合は、使えるロジックがないのが辛いところです。
これらの入力を持つ関数があります。
そのため、このFunctionは時々769という値を出力します。
最初のプリントをアンコメントすると
とすると、正しい値が表示されます。
エラーが発生した瞬間に関数が呼び出さ れた時点でアクティブになっていないコードだけを削除して関数を切り詰めると、エラーも発生しない。
明らかにコンパイラのエラーです。開発者の皆さん、この関数の全文を誰に送ればいいのでしょうか?
スイッチを通してやったが、すべてうまくいった。それなら、コンパイラのせいでしょう。
ストレージにコミットできない...
すでに効果が出ているのだと思います。
すでに効果が出ているのだと思います。
はい。
バグMT5 (build 2345)、テンプレートクラス内でテンプレート関数を宣言する際に、再利用されるテンプレート型名がチェックされず、予期せぬ動作をする。
仮想テンプレート関数の「パターン」エミュレーションを実装するには、型継承の他に、親クラスへのポインタの直接値をベースクラスに引き込む必要があることが判明し、これはまずい...と思いました。
どなたか、これをコンパイルされた方はいらっしゃいますか?
どうしたんですか?