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

 
質問があるのですが、今、無料シグナルを 見つけるにはどうしたらいいのでしょうか?定期的に手動で探していますが、シグナルのページには有料のシグナルしか表示されません。値でフィルタリングしても見つからない。
 
テスターで選択したExpert Advisorに接続されたライブラリを再コンパイルしても、次の実行で選択されない。テスターで別のExpert Advisorを選択してから、前のExpert Advisorに切り替える必要があります。そうして初めて、テスターは新しいライブラリを手に入れることができるのです。全く気付かないバグ。
 
Stanislav Korotky:
テスターで選択されているExpert Advisorに接続されているライブラリを再コンパイルしても、次回起動時にピックアップされない。テスターで別のExpert Advisorを選択してから、前のExpert Advisorに切り替える必要があります。そうして初めて、テスターは新しいライブラリを手に入れることができるのです。全く気付かないバグ。

安定版でも同じなのですが・・・。

 
MT5 (build 2407) のバグで、クラスがこのクラスをフィールドとして使用するラッパークラスへのポインタを含んでいる場合、コンパイルエラーが発生する。
C++オンライン: https://onlinegdb.com/SJN1shM58
template<typename T>
class wrapper{
public:
   T data;
};

class B{
public:
   wrapper<B>* ptr;             // undefined class 'B' cannot be used
};


void OnStart(){  
   B b;
   b.ptr = new wrapper<B>();
   printf("%p", b.ptr);
} 
 
コンパイルエラーです。
int i = f(); //Error: 'f' - undeclared identifier
void OnStart()
{
}
int f() { return 0; }

が、それ以外は

void OnStart()
{
int i = f(); //нормально
}
int f() { return 0; }

をご覧ください。どんな違いがあるのでしょうか?

 
A100:
コンパイルエラーです。

が、このように

最初の例は、このように前方 一致で記述します。

int f(int);
int i = f(5);
void OnStart()
{
   printf("i = %i", i);
}
//+------------------------------------------------------------------+
int f(int v)
{
   return v * v;
}
//+------------------------------------------------------------------+

2020.05.10 17:23:27.704 tst1 (ETHUSD,M1) i = 25

A100:

OK何が違うのでしょうか?

コンパイラは上から下へ解析していき、最後にOnStart()が解析されると思います
 
Igor Makanu:
コンパイラは上から下へ解析し、OnStart()は最後に解析されると思うのですが

この場合、考える必要はありません。ある関数が宣言の前に適用できる場合は適用でき、そうでない場合はできない、という一般的なルールでよいのです。 したがって、どちらの場合も、コンパイルするかしないかのどちらかでなければなりません

 
A100:

この場合、考える必要はありません。ある関数が宣言の前に適用できる場合は適用でき、そうでない場合はできない、という一般的なルールでよいのです。 その結果、どちらのケースもコンパイルするかしないかのどちらかでなければなりません。

は、これは言語機能という もので、このように書くことができます。

int f(int v)
{
   return v * v;
}
void OnStart()
{
   printf("i = %i", i);
}
//+------------------------------------------------------------------+
int i = f(5);
 
Igor Makanu:

残念ですが、これらは言語の特殊性という もので、そのように書けばいいのです。

すべての特殊性はドキュメンテーションに反映されています。これは現地で見たことがないですね。それゆえ、結論として、それは特徴ではなく、欠点であるということです

 
A100:

この場合、考える必要はありません。ある関数が宣言の前に適用できる場合は適用でき、そうでない場合はできない、という一般的なルールでよいのです。 したがって、どちらの場合も、コンパイルするかしないかのどちらかでなければなりません。

これは、このような言語のCの正常な動作である。

前方関数宣言がない場合は、使用できません。OnStartからの呼び出しは、グローバルレベルでの直接呼び出しに比べ、実際にコンパイルが遅れます。

C++の場合、全く同じエラーが発生します。