Erros, bugs, perguntas - página 2471
![MQL5 - Linguagem para estratégias de negociação inseridas no terminal do cliente MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
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
Explique porque é que quando crio o CChartObjectLabel não estou a apagar objectos em indicador quando desinicializo neste código:
ao mudar de TF recebo entrada no diário: 2019.05.23 09:49:02.044 tstlabel EURUSD,M30: 2 objectos do tipo CChartObjectLabel à esquerda
se não for comentado no OnInit() a criação de etiquetas de texto (CChartObjectLabel), então tudo funcionará correctamente
Passo um ponteiro à funçãoCreateLabel(), masnãoopossoapagar mais tarde emOnDeinit()
É criado um novo objecto l. E não é apagado.
logicamente
Mas o âmbito doCChartObjectLabel,*LabelUP,*LabelDN; as variáveis são globais?
Então posso modificar a variável em qualquer ponto do código?
Eu passo um ponteiro à função CreateLabel(), porque é que crio uma nova cópia?
imho, não está a funcionar correctamente.
HH: Se eu criar objectos no OnInit() e depois trabalhar com eles no CreateLabel() (ou seja, eu crio os objectos separadamente e trabalho com eles por ponteiro), tudo funcionará correctamente - mas não me lembro de um caso noutros compiladores para passar um ponteiro para uma função para criar um novo objecto - um ponteiro, ele é um ponteiro!
logicamente
mas o meu alcance é global? - significa que posso modificar uma variável em qualquer parte do meu código ?
Eu passo um ponteiro ao CreateLabel(), porque é que recebo uma nova cópia?
Imho, não funciona correctamente.
logicamente
Mas o âmbito doCChartObjectLabel,*LabelUP,*LabelDN; as variáveis são globais?
Então posso modificar a variável em qualquer ponto do código?
Eu passo um ponteiro à função CreateLabel(), porque é que crio uma nova cópia?
Imho, não funciona correctamente
Reatribuindo um ponteiro a um novo objecto, perdemos o objecto anterior, que foi apontado pelo ponteiro reatribuído.
não, um ponteiro é um ponteiro, em MQL é um descritor, não é o ponto - mas não é correcto criar uma nova cópia do objecto, isto funciona correctamente agora:
mas se seguir a sua lógica, então este código também criará uma cópia do objecto l na função SetLabel() - eu passei um ponteiro, não uma referência?
novo deve ser removido. Os objectos já existem e o mesmo acontece com as indicações que lhes são dadas.
a questão não é como resolver o problema, mas porque é que no âmbito global da variávelCChartObjectLabel *LabelUP,*LabelDN;- perdeu o ponteiro!
não, um ponteiro é um ponteiro, em MQL é um descritor, não é o ponto - mas não é correcto criar uma nova cópia do objecto, isto funciona correctamente agora:
mas se seguir a sua lógica, então este código também criará uma cópia do objecto l na função SetLabel() - passei um ponteiro, não uma referência?
Não. Aqui l é o parâmetro do método através do qual passamos o ponteiro necessário. Aqui está tudo bem. O ponteiro aqui fica sobre o objecto criado anteriormente. Aqui, não criamos um novo objecto e reatribuímos-lhe o ponteiro com a perda do objecto anterior.
continua a não funcionar correctamente
estes "indicadores" em MQL são feitos para funcionar no âmbito da classe, não quero criar uma classe, declaro um indicador global e depois passo-o a qualquer função, e o facto de nesta função criar um descritor do objecto não é a razão para destruir o objecto ao sair do âmbito local da função
Estou um pouco ocupado neste momento, mas preciso de fazer exemplos de teste sem gráficos - penso que o mesmo acontecerá se introduzir a função com um ponteiro com o valor POINTER_INVALID , por referência, tudo funcionará correctamente, mas parece que não pode passar um ponteiro com o valor POINTER_INVALID por referência - haverá um erro ao aceder ao ponteiro
tudo não funciona correctamente de qualquer maneira
estes "indicadores" em MQL são feitos para funcionar no âmbito da classe. não quero criar uma classe, perfuro e declaro um indicador global, depois passo-o para qualquer função e o facto de eu criar um manípulo de objecto nesta função não é a razão para destruir um objecto ao deixar o âmbito local de uma função
Penso que será o mesmo problema, se entrar com o valor POINTER_INVALID nesta função, sairá com o mesmo valor POINTER_INVALID , por referência, tudo funcionará correctamente, mas parece que não pode passar um valor POINTER_INVALID nesta função - haverá um erro ao aceder ao ponteiro
Fiquei surpreendido ao descobrir que era possível declarar o typedef com um ponteiro para uma função modelo.
No entanto, a felicidade não durou muito tempo.
Será que o typedef com um ponteiro para uma função modelo é uma característica planeada?
Ao trabalhar com typedef, a utilização de uma função de modelo com especialização explícita não gera código para esse modelo