class A{
public:
int ivalue;
int inc()const {staticint v = 0; return(++v);}
A():ivalue(0){}
};
class B{
public:
int ivalue;
int inc(){return(++ivalue);}
B():ivalue(0){}
};
//+------------------------------------------------------------------+voidOnStart()
{
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
}
//+------------------------------------------------------------------+
ここも大丈夫です。
飛んでもない
具体的には、VS2019で確認しました。
エラー CS0133 "a "に割り当てられた式は定数である必要があります。 ConsoleApp2 ...\reposConsoleApp2⇄Program.cs 13 Active
エラー CS0133 b に代入される式は定数でなければなりません。 ConsoleApp2 ...\reposConsoleApp2⇄Program.cs 13 Active
昨年はそのように動作しませんでしたが、私は特にconst修飾子をテストしました
で、@Ilyas さんが説明したMQLプログラムの実行方法は、まずconstとstaticがどこで定義されていてもすべて初期化され、その後クラスのコンストラクタが呼び出されるようです。
OK、この初期化 static / const で、まだ適切に配布することができます - しかし、const 修飾子は、コンパイラがそれをチェックすることを保証しないという事実 - 非常に予期しない - 私の第二の例
どちらの例でも、すべてが正しく動作し、期待通りです。
どちらの例でも、すべてが正しく動作し、期待通りです。
const修飾子は、コンパイル時にコンパイラが私のエラーを見つけることを99%保証します。
const修飾子は、コンパイル時にコンパイラが私のエラーを見つけることを99%保証するもので、VS2019はそれを行うが、MQLはそれを行わない。
具体的にどのような点がエラーとなるのでしょうか?
VS2019からはエラーは出ません。
昨年はそのように動作しませんでしたが、私は特にconst修飾子をテストしました
で、@Ilyas さんが説明されたMQL-programの実行方法は、まずconst変数とstatic変数がどこに記述されていても全て初期化され、その後クラスコンストラクタが呼び出されるようです。
const/static修飾子付きのグローバル変数で、ローカル変数を使用しているようです。
具体的にどのような点がエラーとなるのでしょうか?
VS2019からはエラーは出ません。
MQLコンパイラが曖昧な表現を許容するため、const修飾子があれば定数となるエラーです
この同じコードが、コンパイラによって追跡さ れなかった のですか? もう一方の状況は追跡 調査済みです。
VS2019のSharpはコンパイル前に全て下線を引いています。
ローカル変数を使用しているのに、const/static修飾子を持つグローバル変数を意味したのでしょう。
勘違いしているかもしれませんが、const修飾子の動作はC#とは大きく異なります
const 修飾子で宣言された変数は、変更することができません。コンパイラはこれを記録しておく。
おそらく、他のことを期待しているのでしょう。
おそらく、それとは違うものを期待しているのでしょう。
どうやらそうみたいですね、MQLとC#の間を飛び越えるときも同じようになると期待しています。
ビルド2366
投稿ありがとうございます、確認します
mq5 - 正常です。mq4 - 壊れた。TypeToBytes_ExampleScript.mq4はこちらから 入手可能です。 拡張子をmq5に変更した場合のみ、コンパイルされます。