Errores, fallos, preguntas - página 1980

 
Stanislav Korotky:

No seas grosero. Usted fue el primero en iniciar la comunicación anormal aquí.

¿Preguntando por la compilación en C++? En mi opinión, es una cuestión de trabajo normal.
 
Andrey Barinov:
Para tu referencia, si tus dos ejemplos están claramente traducidos a C++, entonces C++ dará un error en ambos casos. MQL no da un error en el primer caso sólo porque el proceso de compilación (y no el lenguaje en sí) es diferente
 
A100:
¿Preguntando por la compilación en C++?

Con estos dos pasajes:

¿Has probado a compilar este ejemplo en C++, o se trata de un razonamiento teórico general?

en respuesta al ejemplo de trabajo en C++ que di, así como

Si no lo has probado, escríbelo así.

En respuesta a mi ejemplo, acabo de probarlo.

 
Stanislav Korotky:

Con estos dos pasajes:

en respuesta al ejemplo de trabajo que di en C++, y también

en respuesta a lo que acabo de intentar.

Al escribir el ServiceDesk, ¿también se cita el código de un sitio de terceros como ejemplo? Y si no, ¿por qué no?
 
A100:
Para tu referencia, si tus dos ejemplos están claramente traducidos a C++, entonces C++ dará un error en ambos casos. MQL no da un error en el primer caso sólo porque el proceso de compilación (y no el lenguaje en sí) es diferente

Gracias.

 
Andrey Barinov:

Gracias.

Para no ser insustancial, doy el análogo al último (retocado un poco a mi manera):

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

y al mensaje original

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

Lo he comprobado, la variante de Stanislav compila con éxito en VS 2010. Además, el acceso al campo privado también funciona, no sólo al método. Así que tal vez A100 se haya excedido un poco en sus conclusiones esta vez).

 
Alexey Navoykov:

Lo he comprobado, la variante de Stanislav compila con éxito en VS 2010. Además, el acceso al campo privado también funciona, no sólo al método. Así que, tal vez A100 se equivocó en sus conclusiones esta vez )

¿Es exactamente lo mismo que https://www.mql5.com/ru/forum/1111/page1999#comment_5677254?

Arriba están mis opciones... publicar el código aquí - si no puede publicarlo él mismo

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

¿Coincide exactamente con https://www.mql5.com/ru/forum/1111/page1999#comment_5677254?

Arriba están mis variantes. publicar el código aquí - ya que no puede publicar él mismo

¿Qué compilador has utilizado para compilarlo? Mi VS 2010 no compila tu código por una razón completamente diferente: la clase B no está definida donde se llama al método de esa clase. Para ello hay que poner la definición de g() fuera de la clase. Y esto es exactamente lo que hizo Stanislav. Es decir, tu código debería ser así:

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


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

y se compila.

 
Alexey Navoykov:

¿Qué compilador has utilizado para compilar esto?

Básicamente no cambia nada - error de compilación (tengo una tableta - compilador 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