Erros, bugs, perguntas - página 1979

 
Andrey Barinov:
Obrigado. Nunca encontrei isto na documentação. Pode apontar?
Foi ele próprio que inventou esta regra. A documentação diz:
  • privado - permite o acesso a variáveis e métodos de classe apenas a partir de métodos desta classe.

Consequentemente, testfunc() só pode ser acedido a partir de cA::: métodos -> neste caso a partir de cA::test()

 
A100:
E tentou compilar este exemplo em C++ - ou é apenas um raciocínio teórico geral?

Já tentou seguir a ligação? Pode não só compilar aí, mas também executar o exemplo com sucesso.

 
Stanislav Korotky:

Já tentou seguir a ligação? Pode não só compilar aí, mas também executar o exemplo com sucesso.

Então porque é que tal código não funciona?

class cA;
class cB;
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
class cA
  {
private:
   int               m_var;
   int               m_func(void){return(this.m_var);}
public:
   void test(cB &b)
     {
      this.m_var=b.m_var;      // (1) 'm_var' - private member access error
       
      this.m_var=b.m_func();   // (2)  => norm
     }
  };
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
class cB : public cA
  {
  };
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   cA A;
   cB B;

   A.test(&B);
//---
   return(INIT_SUCCEEDED);
  }


Não vejo qualquer diferença entre (1) e (2).

 
Stanislav Korotky:

Já tentou seguir a ligação? Aí pode não só compilar, mas também executar com sucesso um exemplo.

Estamos a discutir o código específico dado acima. Se ainda não o experimentou, basta escrever
 
Andrey Barinov:

Então porque é que este código não funciona?

Agora o 2º teórico vai dar-lhe outra regra, não menos vaga do que a primeira

Proponho que se simplifique o código até ao limite

 
A100:
O código específico acima está em discussão. Se ainda não o experimentou, escreva-o assim

É o código acima que foi afinado para a sintaxe C++ - na verdade deixado um a um no contexto da discussão de acesso de membro privado - e esse código funciona. Esta foi a resposta à pergunta porque funciona em MQL. De que mais precisa? Que mais querem que eu tente? Não escreva disparates você mesmo.

 
Stanislav Korotky:

Foi o código acima que foi afinado para a sintaxe C++ - de facto, foi deixado um a um no contexto da discussão de acesso dos membros privados - e esse código funciona. Esta foi a resposta à pergunta porque funciona em MQL. De que mais precisa? Que mais querem que eu tente? Não escreva disparates você mesmo.

Pode afixá-lo aqui e vamos comparar como o fixou então (não vou aos links nos sites da esquerda). Se não sabe como comunicar normalmente - (quero dizer tretas) não escreva

 
Andrey Barinov:

Então porque é que este código não funciona?


Não vejo qualquer diferença entre (1) e (2).

Este é um bug MQL. Funciona em C++. Escrever para o balcão de atendimento.

 
Stanislav Korotky:

Este é um bug MQL. Em C++ funciona. Escrever para o balcão de atendimento.

Já está. Obrigado.

É só que é interessante no segundo exemplo. cB não sabe nada sobre m_var e m_func e eles não estão disponíveis para ele (ou seja, não podem ser chamados de dentro do próprio cB), enquanto que podem ser chamados de outros objectos...
 
A100:

Coloque-a aqui e comparemos então como a ajustou (não sigo links para sites de esquerda). Se não souber como comunicar normalmente - (quero dizer tretas) não escreva.

Não seja mal-educado. Foi o primeiro a começar a comunicar de forma anormal aqui.

Toda a Internet é constituída por sites de esquerda. Como pode utilizá-lo?

Este site em particular e muitos outros como ele simplificam significativamente a vida dos programadores (permitindo-lhes testar snippets, pedidos http, verificar os sites de mapeamento, etc.) - como tratá-los depende de todos - não querem não os usar, mas não se atrevem a atacar os outros.