Discussão do artigo "Interfaces gráficas XI: Integração da Biblioteca Gráfica Padrão (build 16)" - página 8
Você está perdendo oportunidades de negociação:
- Aplicativos de negociação gratuitos
- 8 000+ sinais para cópia
- Notícias econômicas para análise dos mercados financeiros
Registro
Login
Você concorda com a política do site e com os termos de uso
Se você não tem uma conta, por favor registre-se
Tentei alterar o arquivo ElementBase.mqh, mas ele se torna ainda mais irritante.
Tentei alterar o arquivo ElementBase.mqh, mas ele se torna ainda mais irritante.
Tanto o ElementBase.mqh quanto o Element.mqh precisam ser alterados.
Em compilações recentes, adicionamos uma mensagem ao compilador para os casos em que um método ancestral é sobrecarregado em um descendente:
Exemplo
Nesse caso, a função func(int) do ancestral SFoo é chamada na classe descendente SBar porque o compilador não a encontrou no descendente. O descendente tem apenas a função func(double) e o compilador tenta encontrar uma função com um parâmetro adequado na árvore de herança.
Ou seja, o compilador MQL5 executa a sobrecarga em vez de substituir o método no descendente. No início do desenvolvimento da linguagem, esse relaxamento do compilador MQL5 não foi considerado crítico. Mas ele pode ser alterado no futuro, portanto, agora é emitido um aviso explícito para que os desenvolvedores de programas MQL5 levem em conta e corrijam seus códigos.
Em termos estritos, a substituição é um conceito um pouco mais amplo. Você pode pesquisar a diferença entre sobrecarga e substituição na Internet
.
1. É correto que esse código não seja compilado?
2. É correto que esse código, além do erro mencionado acima, gera o aviso "deprecated behaviour, hidden method calling will be disabled in a future MQL compiler version TestCompiler.mq5 27 18"?
1. É correto afirmar que esse código não é compilado?
2. É correto que esse código, além do erro acima, gera o aviso "deprecated behaviour, hidden method calling will be disabled in a future MQL compiler version TestCompiler.mq5 27 18"?
Talvez seja melhor perguntar isso no tópico sobre a nova versão do terminal? ) Acho que a resposta será mais rápida lá.)
O aviso parece se encaixar na nova lógica do compilador, mas não entendo sobre o membro privado, ele ainda é público...
Tanto o ElementBase.mqh quanto o Element.mqh precisam ser alterados
No ElementBase.mqh, está claro que você substituiu "Is" por "Set" (mas não está claro por que podemos fazer isso).
Mas em Element.mqh há outra linha
Em ElementBase.mqh, está claro que você substituiu "Is" por "Set" (mas não está claro por que podemos fazer isso)
mas em Element.mqh há outra linha
Bem, agora o MQ não gosta dos mesmos nomes (variáveis, métodos, etc.) :)
Apenas alteramos o nome do método (e por que não? ) ) )
Não queremos mudar nada - esperamos que o autor refaça tudo )
O autor provavelmente já "terminou" esse projeto. Você poderia especificar em quais linhas o que escrever para que o compilador não pragueje e, melhor ainda, os arquivos ortodoxos (corrigidos) ( ElementBase.mqh e Element.mqh) para as pessoas
1. Estou no meio de outro projeto no momento.
2. Mudei muito a biblioteca)
Bem, além das alterações em ElementBase.mqh e Element.mqh, você deve examinar todos os elementos, talvez haja esses métodos lá também.
Talvez seja melhor fazer a pergunta no tópico sobre a nova versão do terminal? ) Acho que eles responderão mais rápido lá.)
O aviso parece se encaixar na nova lógica do compilador, mas não entendo sobre o membro privado, ele ainda é público...
Encontrei uma solução alternativa para isso:
Fórum sobre negociação, sistemas de negociação automatizados e teste de estratégias de negociação
Nova versão do MetaTrader 4 build 1170
fxsaber, 2019.09.06 09:39 pm.
Acredito que a opção proposta no MT5 é uma inovação que também deve ser adicionada ao MT4.
Mas se você escrever o código da maneira antiga, ele funcionará em todos os lugares.
É assim que meu exemplo funciona:
CC(void) { ((CA)m_b).func(); }Mas isso não é uma solução, é claro.
@Ilyas, não há opção sem conversão para CA?