Erros, bugs, perguntas - página 2420

 

Porque é que o mql5 moveria a semântica? Não há necessidade de tal optimização de desempenho, especialmente porque se trata de uma máquina virtual. Para que mais precisa dele?)

Por si só, o mql5 é muito diferente de C++, bem como deC++98, e ainda mais de C++11/14/17, mas as suas capacidades cobrem agora completamente as coisas de que necessita para criar uma EA.

 
Andrey Pogoreltsev:

mas as suas capacidades cobrem agora totalmente as coisas de que necessita para criar uma EA.

Cobriram essas necessidades mesmo há 6 anos atrás na antiga MQL4, se tiver alguma ideia do nível da língua naqueles dias. Escrevemos EAs nela, e alguns ainda codificam nesse estilo arcaico. Por isso tudo é relativo.

Para que outro objectivo seria introduzido?)

Isto tem sido discutido nas últimas páginas do tópico.
 

Dá aqui um erro:

void OnStart()
  {
   struct sA
     {
      int               ii[51];
     };
   struct sB
     {
      string            name;
      sA                distrib;
     };
   sB f;
  }
'distrib' - struct undefined    Test2.mq5       21      25

Não é assim:

void OnStart()
  {
   struct sA
     {
      int               ii[51];
     };
   struct sB
     {
      //string            name;
      sA                distrib;
     };
   sB f;
  }

Isto também não funciona:

struct sA
  {
   int               ii[51];
  };
struct sB
  {
   string            name;
   sA                distrib;
  };

void OnStart()
  {
   sB f;
  }

Em anexo está um script para reproduzir o erro, um script vazio com um par de linhas de código, como acima.

Arquivos anexados:
Test2.mq5  1 kb
 

Bem, isso não faz qualquer sentido:

class A
  {
   class B
     {
      class C
        {
         class D
           {
            class E
              {
               bool              YES;
              };
           };
        };
     };
  };
void OnStart()
  {
   E g;
  }

A classe E não merece ser tão popular.

Compila sem quaisquer erros.

 
É um erro de compilação?
class A
{
private:
  int i;
};

class B : public A
{
public:  
  void f( int i ) {} // declaration of 'i' hides member declaration at line 4
};
 
fxsaber:
É um erro de compilação?
Poderá ser uma tagarelice irritante de um formatador sobre tretas, distraindo-o de negócios sérios?
 
fxsaber:
É um erro de compilação?
nos prós a mesma coisa
 
Vict:
Talvez um formchanista irritante a falar de tretas, distraindo-o das coisas sérias?

quando estiveres no meio do seu entusiasmo, dir-me-ás então?

 
fxsaber:
É um erro de compilação?

É mais ou menos lógico.

Como podem os parâmetros de entrada numa função pública ser privados. Conflito de interesses.

Se este parâmetro privado for utilizado dentro desta função, não precisa de ser declarado como input, porque já existe.

Se se pretende que seja outra variável, é claro que haverá um conflito de nomes dentro da função com a variável privada existente, pelo que necessita de ser chamada por um nome diferente.


ZS Acontece que não importa se é público ou privado. É um conflito trivial de nomes. Dentro da função f haverá incerteza sobre o que i é - parâmetro de entrada ou variável global da classe mãe.

 
Nikolai Semko:

a questão implicava que não podemos aceder ao membro por causa da privacidade, mas o conflito de nomes ainda é mostrado pelo compilador.

como escrevi, as vantagens comportam-se exactamente da mesma maneira, ou seja, não há erro no compilador e tudo está bem.