Erros, bugs, perguntas - página 1354

 

Cavalheiros, como gostariam de melhorar significativamente a usabilidade da língua, acrescentandobens: https://msdn.microsoft.com/en-us/library/x9fsa0sw.aspx

A dança constante com setters, getters e parênteses é muito aborrecida.

 
Alexey Navoykov:

Cavalheiros, como gostariam de melhorar significativamente a usabilidade da língua, acrescentandobens: https://msdn.microsoft.com/en-us/library/x9fsa0sw.aspx

A dança constante com setters, getters e parênteses é muito aborrecida.

Alexey, eu sou a favor, mas devíamos fazer uma votação, não aqui. Aqui estão algumas muletas, ainda não experimentei na MQL http://rsdn.ru/article/vcpp/props.xml
Свойства в С++
  • rsdn.org
В этой статье автор рассматривает различные способы реализации свойств в стиле Visual Basic на C++. Некоторые способы специфичны для Visual C++, тогда как другие годятся для применения в любой программе, написанной на языке C++.
 
Alexey Volchanskiy:
Alexey, eu sou a favor, mas devíamos fazer uma votação, não aqui. Há aqui algumas muletas, ainda não experimentei na MQL http://rsdn.ru/article/vcpp/props.xml

Há algo de errado com a codificação na sua ligação, está sempre a mostrar texto vermelho. Mas sei o que quer dizer, já li sobre estas muletas antes. Não é possível implementá-la em MQL neste momento, porque a sobrecarga do operador fantasma não é suportada.Mas esta característica nativa em VS é muito útil, especialmente quando envolvida numa macro. E não consome quaisquer recursos adicionais. Por isso, é mais que tempo de implementarmos propriedades em MQL também, porque tudo parece desajeitado sem elas.

 
Alexey Volchanskiy:

Descobri-o, encontrei um bug no compilador MQL4. Eu estava desatento e demorei 2 dias a encontrá-lo. A essência do problema é a seguinte: vou dar-vos o código mais simples. Não recebo um erro de compilação ou de deformação, recebo um erro de tempo de execução.

    double ptest = double(test); // тут должна быть ошибка компиляции!!! 

Não há necessidade de qualquer erro aqui. Há aqui uma clara conversão do tipo. Seria assim em VS

  double ptest = (double)(int)(test);
Que diferença faria?
 
A100:
Não há necessidade de qualquer erro aqui. Há aqui uma conversão de tipo explícita.
Não se pode dar uma aula a um tipo significativo, mesmo explicitamente. Há definitivamente um erro.
 
Por favor lembrem-me como ordenar os símbolos na janela de visão geral do mercado (MT4, MT5). Num terminal são bem classificados, no outro são uma confusão. Resolvi-o há muito tempo - não me lembro como o fiz. Não há nada na documentação sobre isso, excepto o arrastar de símbolos um a um para um novo local. Mas não o fiz exactamente - é possível ordenar toda a lista manualmente. :-/
 
Vasiliy Sokolov:
Não se pode atribuir uma classe a um tipo significativo, mesmo explicitamente. É definitivamente um erro.

Não é uma classe, é um ponteiro, e um ponteiro é um número.

class A{};
void f()
{
        A *a;
        int i = int(a);
}

O C++ compila sem erros

Se não se permitir uma conversão directa explícita para o dobro, na próxima vez terá int em vez de duplicar com o mesmo resultado e o compilador será novamente culpado. Tem de distinguir os seus próprios erros dos erros do compilador.

 
A100:

Não é uma aula, é um ponteiro, e um ponteiro é um número - aprenda a matemática.

O C++ compila sem erros

Se desactivar a conversão directa explícita para o dobro, na próxima vez terá int em vez de duplicar com o mesmo resultado e o compilador será novamente culpado. Deve distinguir os seus próprios erros dos erros do compilador.

Não há aí nenhum ponteiro, porque os ponteiros não existem na MQL4/5. Há pegas.

----------------------

Recebi uma resposta do Service Desk

Equipa de apoio 2015.08.24 09:44
Obrigado pelo correio, vai arranjá-lo.
De facto, deve haver aqui um erro de compilação.


Equipa de apoio 2015.08.24 14:39

Estado: Aberto Fechado
Obrigado pelo correio, fixado. O compilador irá agora dar um erro de compilação.
 
Alexey Volchanskiy:

Não há aí nenhum ponteiro, porque não há ponteiros na MQL4/5. Existem descritores.

Um descritor é ainda um número específico. O facto de este número não apontar para um local de memória específico não o priva das propriedades de um número.
 
A100:
Um descritor é ainda um número específico
Naturalmente, em termos de "como é armazenado na memória", tem razão.
Mas não faz sentido converter um descritor para um número ou vice-versa, e o mais provável é que seja um erro no código.
Num futuro próximo, se uma declaração de conversão apropriada estiver sobrecarregada na classe, ela será chamada.
Razão: