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

 
Stanislav Korotky:

失礼のないように。ここで最初に異常なコミュニケーションを始めたのはあなたです。

C++でのコンパイルについてお聞きします。私見ですが、普通に社会人としての疑問です。
 
Andrey Barinov:
参考までに、もしあなたの例が両方ともC++に明確に翻訳されているならば、C++は両方のケースでエラーを出します。MQLが1番目のケースでエラーを出さないのは、コンパイルプロセス(言語そのものではなく)が異なるためです。
 
A100:
C++でのコンパイルについてお聞きします。

この2つの節で。

この例をC++でコンパイルしてみましたか。それとも、一般的な理論上の理由ですか?

私があげたC++での作業例に対して、また

試していないなら......そのように書いてください。

私の例への返答ですが、今試してみました。

 
Stanislav Korotky:

この2つの節で。

C++であげた動作例に対して、また

今試したことに対して

ServiceDeskを書くとき、サードパーティーのサイトのコードも例として引用するのですか?また、そうでない場合は、なぜそうしないのか?
 
A100:
参考までに、もしあなたの例が両方ともC++に明確に翻訳されているならば、C++は両方のケースでエラーを出します。MQLが1番目のケースでエラーを出さないのは、コンパイルプロセス(言語そのものではなく)が異なるためです。

ありがとうございます。

 
Andrey Barinov:

ありがとうございます。

そこで、根拠がないように、前回のアナログを出す(自分なりに少しいじった)。

#ifdef __cplusplus
class B;
class A {
        int f( B* b ) { return b->i; } //Error: E2315
        int i;
};
class B : public A {};
#endif

と、元のメッセージに

#ifdef __cplusplus
class B;
class A {
        void f() {}
        void g() { b->f(); } //Error: E2315
        B *b;
};
class B : public A {};
#endif
 

確認したところ、Stanislav氏のバージョンはVS 2010で正常にコンパイルできました。また、メソッドだけでなく、プライベートフィールドへのアクセスも有効です。だから、今回のA100はちょっと結論が出過ぎたかもしれない)。

 
Alexey Navoykov:

確認したところ、Stanislav氏のバージョンはVS 2010で正常にコンパイルできました。また、メソッドだけでなく、プライベートフィールドへのアクセスも有効です。ということは、今回のA100の結論は間違っていたのかもしれない )

https://www.mql5.com/ru/forum/1111/page1999#comment_5677254 と全く同じなのでしょうか?

上記は私の選択肢です...コードをここに書き込む - もし彼が自分で書き込めないのなら

Ошибки, баги, вопросы
Ошибки, баги, вопросы
  • 2017.08.29
  • www.mql5.com
Форум алго-трейдеров MQL5
 
A100:

https://www.mql5.com/ru/forum/1111/page1999#comment_5677254 と全く同じですか?

上記は私のバリエーションです。コードをここに書き込む - 自分で書き込めないので

コンパイルに使用したコンパイラは?私のVS 2010では、全く別の理由であなたのコードがコンパイルされません:Bクラスが、そのクラスのメソッドが呼び出される場所で定義されていません。そのためには、g()の定義をクラスの外に置く必要があります。そして、これこそが、スタニスラフのやったことなのだ。つまり、あなたのコードは次のようになります。

class B;
class A {
  void f() {}
  void g();
  B *b;
};
class B : public A {};


void A::g(void)
{
  b->f();
}

と入力すると、コンパイルされます。

 
Alexey Navoykov:

どのようなコンパイラーでコンパイルしたのでしょうか?

基本的には何も変わりません。コンパイルエラー(タブレットを使用しています。)

#ifdef __cplusplus
class B;
class A {
        void f() {}
        void g();
        B *b;
};
class B : public A {};
void A::g() { b->f(); } //Error: E2247
#endif