Fehler, Irrtümer, Fragen - Seite 1980

 
Stanislav Korotky:

Seien Sie nicht unhöflich. Sie waren der Erste, der hier mit der anormalen Kommunikation begonnen hat.

Mit der Frage nach der Kompilierung in C++ ? Meiner Meinung nach ist das eine normale Arbeitsfrage.
 
Andrey Barinov:
Zu Ihrer Information: Wenn Ihre beiden Beispiele eindeutig in C++ übersetzt sind, dann wird C++ in beiden Fällen einen Fehler anzeigen. MQL gibt im 1. Fall nur deshalb keinen Fehler, weil der Kompilierungsprozess (und nicht die Sprache selbst) anders ist
 
A100:
Mit der Frage nach der Kompilierung in C++ ?

Mit diesen beiden Passagen:

Haben Sie versucht, dieses Beispiel in C++ zu kompilieren - oder ist dies eine allgemeine theoretische Überlegung?

als Antwort auf das Arbeitsbeispiel in C++, das ich gegeben habe, und auch

Wenn Sie es noch nicht ausprobiert haben, schreiben Sie es so.

Um auf mein Beispiel zu antworten: Ich habe es gerade ausprobiert.

 
Stanislav Korotky:

Mit diesen beiden Passagen:

als Antwort auf das Arbeitsbeispiel in C++, das ich gegeben habe, und auch

als Antwort auf das, was ich gerade versucht habe.

Wenn Sie ServiceDesk schreiben, zitieren Sie dann auch den Code auf einer Website eines Dritten als Beispiel? Und wenn nicht, warum nicht?
 
A100:
Zu Ihrer Information: Wenn Ihre beiden Beispiele eindeutig in C++ übersetzt sind, dann wird C++ in beiden Fällen einen Fehler anzeigen. MQL gibt im 1. Fall nur deshalb keinen Fehler, weil der Kompilierungsprozess (und nicht die Sprache selbst) anders ist

Ich danke Ihnen.

 
Andrey Barinov:

Ich danke Ihnen.

Um nicht unsubstantiiert zu sein, gebe ich die Analogie zum letzten Beispiel an (auf meine Art ein wenig abgewandelt):

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

und zur ursprünglichen Nachricht

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

Ich habe überprüft, Stanislavs Variante kompiliert erfolgreich in VS 2010. Darüber hinaus funktioniert auch der Zugriff auf das private Feld, nicht nur auf die Methode. Vielleicht war A100 dieses Mal etwas übereifrig in seinen Schlussfolgerungen).

 
Alexey Navoykov:

Ich habe überprüft, Stanislavs Variante kompiliert erfolgreich in VS 2010. Darüber hinaus funktioniert auch der Zugriff auf das private Feld, nicht nur auf die Methode. Vielleicht lag A100 mit seinen Schlussfolgerungen diesmal also falsch.)

Ist es genau dasselbe wie https://www.mql5.com/ru/forum/1111/page1999#comment_5677254?

Das sind meine Optionen... den Code hier einstellen - wenn er ihn nicht selbst einstellen kann

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

Stimmt sie genau mit https://www.mql5.com/ru/forum/1111/page1999#comment_5677254 überein?

Das sind meine Varianten. den Code hier einstellen - da er ihn nicht selbst einstellen kann

Welchen Compiler haben Sie zum Kompilieren verwendet? Mein VS 2010 kompiliert Ihren Code aus einem ganz anderen Grund nicht: Die Klasse B ist nicht dort definiert, wo die Methode dieser Klasse aufgerufen wird. Dazu müssen Sie die Definition von g() außerhalb der Klasse platzieren. Und genau das hat Stanislav getan. D.h. Ihr Code sollte wie folgt aussehen:

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


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

und es wird kompiliert.

 
Alexey Navoykov:

Welchen Compiler haben Sie zum Kompilieren verwendet?

Im Grunde ändert es nichts - Kompilierungsfehler (ich habe ein Tablet - Borland Compiler)

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