Erros, bugs, perguntas - página 1980

 
Stanislav Korotky:

Não seja mal-educado. Foi o primeiro a iniciar aqui a comunicação anormal.

Ao perguntar sobre a compilação em C++ ? Na minha opinião, é uma questão de trabalho normal.
 
Andrey Barinov:
Para sua referência, se ambos os seus exemplos forem claramente traduzidos em C++, então C+++ dará um erro em ambos os casos. A MQL não dá um erro no 1º caso apenas porque o processo de compilação (e não a língua em si) é diferente
 
A100:
Ao perguntar sobre a compilação em C++ ?

Com estas duas passagens:

Já tentou compilar este exemplo em C++ - ou este é um raciocínio teórico geral?

em resposta ao exemplo de trabalho em C++ que eu dei, bem como

Se ainda não o tentou - escreva-o dessa forma.

Em resposta ao meu exemplo, acabei de o experimentar.

 
Stanislav Korotky:

Com estas duas passagens:

em resposta ao exemplo de trabalho que dei em C++, e também

em resposta ao que acabei de tentar.

Ao escrever ServiceDesk, também cita o código num site de terceiros como exemplo? E se não, porque não?
 
A100:
Para sua referência, se ambos os seus exemplos forem claramente traduzidos em C++, então C+++ dará um erro em ambos os casos. A MQL não dá um erro no 1º caso apenas porque o processo de compilação (e não a língua em si) é diferente

Obrigado.

 
Andrey Barinov:

Obrigado.

Para não ser insubstanciado, dou o análogo ao último (afinei-o um pouco à minha maneira):

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

e à mensagem original

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

Verifiquei, a variante de Stanislav compila com sucesso em VS 2010. Além disso, o acesso ao campo privado também funciona, e não apenas ao método. Portanto, talvez A100 tenha sido um pouco demais nas suas conclusões desta vez).

 
Alexey Navoykov:

Verifiquei, a variante de Stanislav compila com sucesso em VS 2010. Além disso, o acesso ao campo privado também funciona, e não apenas ao método. Portanto, talvez o A100 estivesse errado nas suas conclusões desta vez )

É exactamente o mesmo que https://www.mql5.com/ru/forum/1111/page1999#comment_5677254?

Acima estão as minhas opções... afixar o código aqui - se ele próprio não o puder afixar

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

Corresponde exactamente a https://www.mql5.com/ru/forum/1111/page1999#comment_5677254?

Acima estão as minhas variantes. afixar o código aqui - uma vez que ele próprio não o pode afixar

Que compilador utilizou para o compilar? O meu VS 2010 não compila o seu código por uma razão completamente diferente: a classe B não é definida onde o método dessa classe é chamado. É necessário colocar a definição de g() fora da classe para isso. E foi exactamente isto que Stanislav fez. Isto é, o seu código deve ser assim:

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


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

e compila.

 
Alexey Navoykov:

Que compilador utilizou para compilar isto?

Basicamente não muda nada - erro de compilação (tenho um comprimido - 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