エラー、バグ、質問 - ページ 2271 1...226422652266226722682269227022712272227322742275227622772278...3185 新しいコメント Georgiy Merts 2018.09.02 12:35 #22701 A100: コンパイルエラーです。(1)(2)と(3)(4)の根本的な違いは何でしょうか。関数の外でクラス(3)(4)を宣言しても、エラーは発生しません。関数内で宣言すると、エラーが発生します。 Artyom Trishkin 2018.09.02 12:43 #22702 Vladimir Pastushak:次のような行動は、何に関連するのでしょうか。 コンパイルしたインジケータは正常に動作し、再度コンパイルしたインジケータは正常に動作しない。テスターで正常に動作するか?どの指標? A100 2018.09.02 17:36 #22703 fxsaber: ここで、C++は何を生み出す のでしょうか? MQL5で動作させるためには、出力に同じ文字列ではなく、2つの異なる文字列が必要です。でも、それならサイン形成のメカニズムも絶対に違うはずです。C++が printで同じ結果を出 せば、__FUNCSIG__のコストは劇的に下がります。結果: C++ void f<g1::A>( g1::A& ) void f<g2::A>( g2::A& ) ご覧の通り、弦が違う...。関数シグネチャが使用される fxsaber 2018.09.02 17:57 #22704 A100:結果: C++ void f<g1::A>( g1::A& ) void f<g2::A>( g2::A& ) ご覧の通り、弦が違う...。関数シグネチャが使用されるMQL5が出る。 void f<A>(A&)つまり、関数の内部にクラス・シグネチャが存在しない。いつかは対応する。 また、クラスがグローバルである場合、C++はどの行を生成するのでしょうか? void f<::A>( ::A& ) void f<A>( A& ) A100 2018.09.02 18:26 #22705 fxsaber:MQL5が配布する つまり、関数の内部にクラス・シグネチャが存在しないのです。いつかは対応する。旧式のC++コンパイラがサポートしていない場合、すでにソース コードの1行目(1)でエラーになります。そもそも、なぜある場合はエラーになり、別の場合は正常なエラーになるのか、という疑問がこのような形で投げかけられたわけです。 どちらの場合も、エラーになるか、エラーにならないか、同じ動作をすると思っていました。そして、エラーは、サポートの欠如それ自体にあるのではなく、他の平等な条件下での不平等な行動(この例の ように)にあります。 A100 2018.09.02 18:27 #22706 fxsaber: また、クラスがグローバルである場合、C++はどの行を生成するのでしょうか?void f<::A>( ::A& ) void f<A>( A& )第2バリアント fxsaber 2018.09.02 19:39 #22707 A100:旧式のC++コンパイラがこれをサポートしていない場合、すでにソース コードの1行目(1)でエラーになります。そもそも、なぜある場合はエラーになり、別の場合は正常なエラーになるのか、という疑問がこのような形で投げかけられたわけです。 どちらの場合も、エラーになるか、エラーにならないか、同じ動作をすると思っていました。そして、エラーは、サポートの欠如それ自体ではなく、他のすべてが同じである(この例の ように)不平等な動作にあります。まあ、説明するのは簡単なんですけどね。コンパイラは、コードを上から下へと走査し、対応するシグネチャを形成しながら進めていく。最初の署名は問題なく作成されます。2枚目に至っては、すでにそのような署名があるのです。ここでは、2行目でエラーになっています。 A100 2018.09.02 19:42 #22708 Georgiy Merts:クラス(3)(4)を関数外で宣言しても、エラーは発生しません。関数の中で宣言すると-エラーが発生します。 もし、最初の例で class A2 { int i; }; //(3) 置き換える interface A2 {}; //(5) 関数の中で宣言してもエラーにならないのですが、根本的な違いは何でしょうか? A100 2018.09.02 23:24 #22709 fxsaber:だから、理解できるのです。コンパイラはコードの上から下へと進み、適切なシグネチャを形成しながら進めていく。最初の署名は問題なく作成されます。2枚目まで来て、すでに1枚持っている。したがって、2行目でエラーになります。では、なぜMQLでエラーなくコンパイルできるのでしょうか? template<typename T> void f() { Print(__FUNCSIG__); } void g1() { class A { int x; } a; f<A>(); } void g2() { class A { double x; } a; f<A>(); } void OnStart() { g1(); g2(); } 結果:MQL C++void f<A>() void f<g1::A>() void f<A>() void f<g2::A>() なぜ、ここで何の干渉も受けずに署名が作成されるのか? fxsaber 2018.09.03 00:07 #22710 A100:では、なぜMQLでエラーなくコンパイルできるのでしょうか? 結果:MQL C++void f<A>() void f<g1::A>() void f<A>() void f<g2::A>() なぜ、ここで何の干渉も受けずに署名が作成されるのか? 1つは創られるだけです。さらに、fではTを使うことができません。とにかく、状況は一目瞭然なのです。 1...226422652266226722682269227022712272227322742275227622772278...3185 新しいコメント 取引の機会を逃しています。 無料取引アプリ 8千を超えるシグナルをコピー 金融ニュースで金融マーケットを探索 新規登録 ログイン スペースを含まないラテン文字 このメールにパスワードが送信されます エラーが発生しました Googleでログイン WebサイトポリシーおよびMQL5.COM利用規約に同意します。 新規登録 MQL5.com WebサイトへのログインにCookieの使用を許可します。 ログインするには、ブラウザで必要な設定を有効にしてください。 ログイン/パスワードをお忘れですか? Googleでログイン
コンパイルエラーです。
(1)(2)と(3)(4)の根本的な違いは何でしょうか。
関数の外でクラス(3)(4)を宣言しても、エラーは発生しません。関数内で宣言すると、エラーが発生します。
次のような行動は、何に関連するのでしょうか。
コンパイルしたインジケータは正常に動作し、再度コンパイルしたインジケータは正常に動作しない。テスターで正常に動作するか?
どの指標?
ここで、C++は何を生み出す のでしょうか?
MQL5で動作させるためには、出力に同じ文字列ではなく、2つの異なる文字列が必要です。でも、それならサイン形成のメカニズムも絶対に違うはずです。C++が printで同じ結果を出 せば、__FUNCSIG__のコストは劇的に下がります。
結果: C++
void f<g1::A>( g1::A& )
void f<g2::A>( g2::A& )
ご覧の通り、弦が違う...。関数シグネチャが使用される
結果: C++
void f<g1::A>( g1::A& )
void f<g2::A>( g2::A& )
ご覧の通り、弦が違う...。関数シグネチャが使用される
MQL5が出る。
void f<A>(A&)つまり、関数の内部にクラス・シグネチャが存在しない。いつかは対応する。
また、クラスがグローバルである場合、C++はどの行を生成するのでしょうか?
void f<::A>( ::A& )
void f<A>( A& )
MQL5が配布する
つまり、関数の内部にクラス・シグネチャが存在しないのです。いつかは対応する。
旧式のC++コンパイラがサポートしていない場合、すでにソース コードの1行目(1)でエラーになります。そもそも、なぜある場合はエラーになり、別の場合は正常なエラーになるのか、という疑問がこのような形で投げかけられたわけです。
どちらの場合も、エラーになるか、エラーにならないか、同じ動作をすると思っていました。そして、エラーは、サポートの欠如それ自体にあるのではなく、他の平等な条件下での不平等な行動(この例の ように)にあります。
また、クラスがグローバルである場合、C++はどの行を生成するのでしょうか?
void f<::A>( ::A& )
void f<A>( A& )
第2バリアント
旧式のC++コンパイラがこれをサポートしていない場合、すでにソース コードの1行目(1)でエラーになります。そもそも、なぜある場合はエラーになり、別の場合は正常なエラーになるのか、という疑問がこのような形で投げかけられたわけです。
どちらの場合も、エラーになるか、エラーにならないか、同じ動作をすると思っていました。そして、エラーは、サポートの欠如それ自体ではなく、他のすべてが同じである(この例の ように)不平等な動作にあります。
まあ、説明するのは簡単なんですけどね。コンパイラは、コードを上から下へと走査し、対応するシグネチャを形成しながら進めていく。最初の署名は問題なく作成されます。2枚目に至っては、すでにそのような署名があるのです。ここでは、2行目でエラーになっています。
クラス(3)(4)を関数外で宣言しても、エラーは発生しません。関数の中で宣言すると-エラーが発生します。
置き換える
関数の中で宣言してもエラーにならないのですが、根本的な違いは何でしょうか?
だから、理解できるのです。コンパイラはコードの上から下へと進み、適切なシグネチャを形成しながら進めていく。最初の署名は問題なく作成されます。2枚目まで来て、すでに1枚持っている。したがって、2行目でエラーになります。
では、なぜMQLでエラーなくコンパイルできるのでしょうか?
結果:MQL C++
void f<A>() void f<g1::A>()
void f<A>() void f<g2::A>()
なぜ、ここで何の干渉も受けずに署名が作成されるのか?
では、なぜMQLでエラーなくコンパイルできるのでしょうか?
結果:MQL C++
void f<A>() void f<g1::A>()
void f<A>() void f<g2::A>()
なぜ、ここで何の干渉も受けずに署名が作成されるのか?
1つは創られるだけです。さらに、fではTを使うことができません。とにかく、状況は一目瞭然なのです。