エラー、バグ、質問 - ページ 1615

 
皆さん、こんにちは。MT5サーバーの接続が中断されたときに、アカウントに再ログインする方法はありますか?
 

コンパイルエラーです。

class A
{ 
};

template<typename T>  void func(T *const &a[])  { } 


void OnStart()
  {
    A *const a[] = { NULL };
    func(a);      //  'a' - cannot convert from const pointer to nonconst pointer
  }
 

ここで、さらにいくつかの失敗を紹介します。

template<typename T> void F(T)
{
  class A
  {
    void f()  { new A; }  // 'A' - declaration without type
        
    void g()  { A* a; }   // 'A' - pointer to this function type is not supported yet
  };
};


void OnStart()
  {
    F(0);
  }
 

あと、ポインターの変換もおかしい。

以下のコードはコンパイルできません。

class A
{
};

class B : protected A
{
};

void OnStart()
  {
    A* a;
    B* b= (B*)a;  // conversion from 'B *' to 'A *' is not accessible because of inheritance access
  }

が、ここでは変換が明示されています。全てはC++で動く。

 
Alexey Navoykov:

あと、道しるべを持ち込むのも何かメチャクチャですね。

その通り、コンパイラは悪態をつく。
 
Комбинатор:
そうなんです、コンパイラが戦っているんです。
C++を開いて、どうあるべきかを確認する。
 
Alexey Navoykov:
dynamic_cast、static_cast、reinterpret_castについて、また、それらをいつ正しく使い、いつ使わないかについて読んできてください。
 
Комбинатор:
dynamic_cast、static_cast、reinterpret_castについて、また、それらを正しく使うべき場合とそうでない場合について読んできてください。
不必要な洪水や哲学は避けましょう、いいですか? 私たちは、コンパイルすべき特定の構成について話しているのです。
 
Alexey Navoykov:

C++はこのコードをreinterpret_castに、MQLはdynamic_castに変換します。また、私の理解では、コンパイラがコンパイル時にダイナミックキャストエラーを発見できるのは、まさにこの場合です。

reinterpret_castはこの場合非合法なので、このコードがC++でコンパイルされることは論外です。

 
Комбинатор:

C++はこのコードをreinterpret_castに、MQLはdynamic_castに変換します。また、私の理解では、コンパイラがコンパイル時にダイナミックキャストエラーを発見できるのは、まさにこの場合です。

この場合、Reinterpret_castは非合法なので、このコードがC++でコンパイルされるという事実は論拠になりません。

ダイナミックキャストと何の関係があるんだ? コンパイラの仕事は、シャーロック・ホームズになってプログラムロジックの中から何かを探し出すことではない。 言語規格に準拠しているかどうかを形式的にチェックするだけだ。 そして規格から見ればすべて正しいのだ。

私のサンプルをよく見ていただければ、protectedに関する問題であることがおわかりいただけたと思います。 publicに変更すれば、すべてOKです。つまり、MQLコンパイラに不要な制約があるだけなのです。

ですから、憶測で何もないところに秘密の意味を探したりしないでください。これは単なる些細なコンパイラのエラーに過ぎません。