Errori, bug, domande - pagina 1980

 
Stanislav Korotky:

Non essere scortese. Sei stato il primo a iniziare la comunicazione anomala qui.

Chiedendo della compilazione in C++ ? Secondo me, è una normale domanda di lavoro.
 
Andrey Barinov:
Per il tuo riferimento, se entrambi i tuoi esempi sono chiaramente tradotti in C++, allora C++ darà un errore in entrambi i casi. MQL non dà un errore nel 1° caso solo perché il processo di compilazione (e non il linguaggio stesso) è diverso
 
A100:
Chiedendo della compilazione in C++ ?

Con questi due passaggi:

Hai provato a compilare questo esempio in C++ - o è un ragionamento teorico generale?

in risposta all'esempio di lavoro in C++ che ho dato, e anche

Se non l'hai provato, scrivilo così.

In risposta al mio esempio, ho appena provato.

 
Stanislav Korotky:

Con questi due passaggi:

in risposta all'esempio di lavoro che ho dato in C++, e anche

in risposta a quello che ho appena provato.

Quando scrivi ServiceDesk, citi anche il codice di un sito di terzi come esempio? E se no, perché no?
 
A100:
Per il tuo riferimento, se entrambi i tuoi esempi sono chiaramente tradotti in C++, allora C++ darà un errore in entrambi i casi. MQL non dà un errore nel 1° caso solo perché il processo di compilazione (e non il linguaggio stesso) è diverso

Grazie.

 
Andrey Barinov:

Grazie.

Per non essere infondato, do l'analogo dell'ultimo (modificato un po' a modo mio):

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

e al messaggio originale

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

Ho controllato, la variante di Stanislav compila con successo in VS 2010. Inoltre, funziona anche l'accesso al campo privato, non solo al metodo. Quindi, forse A100 era un po' troppo nelle sue conclusioni questa volta).

 
Alexey Navoykov:

Ho controllato, la variante di Stanislav compila con successo in VS 2010. Inoltre, funziona anche l'accesso al campo privato, non solo al metodo. Quindi, forse A100 si è sbagliato nelle sue conclusioni questa volta )

È esattamente lo stesso di https://www.mql5.com/ru/forum/1111/page1999#comment_5677254?

Qui sopra ci sono le mie opzioni... postare il codice qui - se non può postarlo lui stesso

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

Corrisponde esattamente a https://www.mql5.com/ru/forum/1111/page1999#comment_5677254?

Sopra ci sono le mie varianti. postare il codice qui - dato che non può postarlo lui stesso

Che compilatore hai usato per compilarlo? Il mio VS 2010 non compila il tuo codice per un motivo completamente diverso: la classe B non è definita dove viene chiamato il metodo di quella classe. Dovete mettere la definizione di g() fuori dalla classe per questo. E questo è esattamente ciò che Stanislav ha fatto. Cioè il vostro codice dovrebbe essere come questo:

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


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

e si compila.

 
Alexey Navoykov:

Che compilatore hai usato per compilare questo?

Fondamentalmente non cambia nulla - errore di compilazione (ho un tablet - compilatore Borland)

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