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

 
Koldun Zloy:

ここも大丈夫です。

飛んでもない

具体的には、VS2019で確認しました。

class A
    {
        private int f1() { return 1; }
        private int f2() { return 2; }
        public int  f(int v) { const int a = f1(); const int b = f2(); return (v + a + b); }
    }

エラー CS0133 "a "に割り当てられた式は定数である必要があります。 ConsoleApp2 ...\reposConsoleApp2⇄Program.cs 13 Active

エラー CS0133 b に代入される式は定数でなければなりません。 ConsoleApp2 ...\reposConsoleApp2⇄Program.cs 13 Active

削除済み  
Igor Makanu:

昨年はそのように動作しませんでしたが、私は特にconst修飾子をテストしました

で、@Ilyas さんが説明したMQLプログラムの実行方法は、まずconstとstaticがどこで定義されていてもすべて初期化され、その後クラスのコンストラクタが呼び出されるようです。

OK、この初期化 static / const で、まだ適切に配布することができます - しかし、const 修飾子は、コンパイラがそれをチェックすることを保証しないという事実 - 非常に予期しない - 私の第二の例

どちらの例でも、すべてが正しく動作し、期待通りです。

 
Koldun Zloy:

どちらの例でも、すべてが正しく動作し、期待通りです。

const修飾子は、コンパイル時にコンパイラが私のエラーを見つけることを99%保証します。

削除済み  
Igor Makanu:

const修飾子は、コンパイル時にコンパイラが私のエラーを見つけることを99%保証するもので、VS2019はそれを行うが、MQLはそれを行わない。

具体的にどのような点がエラーとなるのでしょうか?

VS2019からはエラーは出ません。

 
Igor Makanu:

昨年はそのように動作しませんでしたが、私は特にconst修飾子をテストしました

で、@Ilyas さんが説明されたMQL-programの実行方法は、まずconst変数とstatic変数がどこに記述されていても全て初期化され、その後クラスコンストラクタが呼び出されるようです。

const/static修飾子付きのグローバル変数で、ローカル変数を使用しているようです。

 
Koldun Zloy:

具体的にどのような点がエラーとなるのでしょうか?

VS2019からはエラーは出ません。

MQLコンパイラが曖昧な表現を許容するため、const修飾子があれば定数となるエラーです

この同じコードが、コンパイラによって追跡さ れなかった のですか? もう一方の状況は追跡 調査済みです。

VS2019のSharpはコンパイル前に全て下線を引いています。

class A{
public:
   int ivalue;
   int inc()const {static int v = 0; return(++v);}
   A():ivalue(0){}
};

class B{
public:
   int ivalue;
   int inc(){return(++ivalue);}
   B():ivalue(0){}
};

//+------------------------------------------------------------------+
void OnStart()
{
   const A a;
   Print(a.inc());  
   B b1;
   Print(b1.inc());
   const B b2;
   Print(b2.inc()); // 'inc' - call non-const method for constant object
}
//+------------------------------------------------------------------+
セルゲイ・デジュブリク

ローカル変数を使用しているのに、const/static修飾子を持つグローバル変数を意味したのでしょう。

勘違いしているかもしれませんが、const修飾子の動作はC#とは大きく異なります

削除済み  

const 修飾子で宣言された変数は、変更することができません。コンパイラはこれを記録しておく。

おそらく、他のことを期待しているのでしょう。

 
Koldun Zloy:

おそらく、それとは違うものを期待しているのでしょう。

どうやらそうみたいですね、MQLとC#の間を飛び越えるときも同じようになると期待しています。

削除済み  

ビルド2366

namespace X
{

class A
{
public:
   A(){}
};

}  //  namespace X

class B : public X::A
{
public:
   B() : X::A()  //'X' - struct member undefined
   {
   }
};
 
Ilyas:

投稿ありがとうございます、確認します

mq5 - 正常です。mq4 - 壊れた。TypeToBytes_ExampleScript.mq4はこちらから 入手可能です。 拡張子をmq5に変更した場合のみ、コンパイルされます。