Erros, bugs, perguntas - página 2045
![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
Mas coloquei aí a dimensão de matriz errada, talvez a tenha afectado de alguma forma (embora não a devesse afectar de todo).
Experimente isto com dimensão = 3
Descobriu a causa da discrepância. Com OPTIMIZE=0 há um erro, mas não com OPTIMIZE=1. Eu normalmente só uso OPTIMIZE=0
Se encontrar uma explicação lógica (não contraditória) para o resultado, não vejo o bug. Não creio que seja aceitável provar um erro se o resultado não corresponder a C+++. É em C++ que alguém pensou e o fez. Mas podem não ter pensado assim e por isso não o fizeram. É por isso que é melhor não se referir a algo lá fora, mas confiar no seu próprio conceito interior do que deve ser. E é desejável que este "próprio" seja realmente o seu. Não o resultado de imposição imperceptível de estereótipos "como deve ser" à medida que se ganha experiência de programação.
Se não tiver a sua própria explicação, isso significa que não há erro. E se esta explicação aparecer um ano mais tarde e for bastante convincente, será que todos terão de refazer tudo? Em C++ já pensaram uma centena de vezes porque é que é feito desta maneira e não daquela maneira. E a explicação é necessária se algo for estabelecido de forma diferente em MQL do que em C++ e não o contrário.
Mas não uma função.
Então as instâncias de classes estáticas devem ser proibidas - porque são inicializadas por uma função construtora
E aqui fica mais sobre o tema da inicialização variável. Se seguir o que foi declarado na documentação, então também não pode fazer referência a outras variáveis globais/estáticas. Uma vez que não é uma expressão constante:
No entanto, por agora funciona. E suponho que muitas pessoas sempre utilizaram tais construções sem se aperceberem disso. Mas acontece que os criadores podem desactivá-lo a qualquer momento. E, como no caso da inicialização de funções, estes códigos ainda serão compilados com sucesso, mas não funcionarão correctamente. Em suma, todo o MQL é uma bomba relógio.
E aqui está outra coisa relativa à inicialização de variáveis. Se seguir o que foi declarado na documentação, então também não pode fazer referência a outras variáveis globais/estáticas. Porque não é uma expressão constante:
é rubricado por uma função construtora - proibir!
Isto se resumirmos logicamente os últimos posts
Descobriu a razão para a discrepância. Com OPTIMIZE=0 há um erro, mas não com OPTIMIZE=1. Utilizo sempre apenas OPTIMIZE=0.
No terminal de 32 bits ocorre um erro em qualquer OPTIMIZE
é rubricado por uma função construtora - proibir!
Isto se resumirmos logicamente os últimos posts
Bem, a pessoa apenas o expressou incorrectamente ali. Naturalmente, estamos a falar de um valor inicializador, não de uma função inicializadora.
E o que se passa com eles - proibições. Não causam problemas por si só. Mas quando esta proibição não é de modo algum controlada pelo compilador, mas gera um algoritmo que ultrapassa as regras da linguagem, não se enquadra de todo. Agora terá de vasculhar todo o código à procura de tais coisas e estar constantemente em guarda. Bem, que se lixe esse tipo de programação, prefiro ficar na velha construção.
Estou a ver, peço desculpa então, não reparei logo. Estou surpreendido, é claro, como conseguiram mudá-lo silenciosamente e não disseram a ninguém. O que não compreendo é porque é que o compilador não reage a uma operação inválida que está a ser executada. Ou seja, o insecto está presente em qualquer caso.
E aqui está mais sobre o tema da inicialização das variáveis. Se seguir o que foi declarado na documentação, então também não pode fazer referência a outras variáveis globais/estáticas. Uma vez que não é uma expressão constante:
No entanto, por agora funciona. E suponho que muitas pessoas sempre utilizaram tais construções sem se aperceberem disso. Mas acontece que os criadores podem desactivá-lo a qualquer momento. E, como no caso da inicialização de funções, estes códigos ainda serão compilados com sucesso, mas não funcionarão correctamente. Em suma, todo o MQL é uma mina que trabalha em câmara lenta.
Bem... não há qualquer discrepância com a descrição na documentação deste exemplo... Dê uma boa olhada na citação da documentação
ou por uma expressãoconstante
Esta inicialização é possível. Porque a variável 'a' é inicializada por uma constante e a variável 'b' é inicializada por uma expressão constante.
Depois é necessário proibir instâncias estáticas de classes - porque são inicializadas por função construtora
Preste atenção a
Fórum sobre comércio, sistemas automatizados de comércio e teste de estratégias comerciais
Insectos, insectos, perguntas
Alexey Viktorov, 2017.10.18 09:19
Porque pensa que mudou, porque é inaceitável? Por favor, use à sua discrição. O problema é que quando uma variável estática é inicializada por uma função, a inicialização é "pausada" e essa função é executada. E no exemplo acima, há ainda uma variável estática nessa função que ainda não foi inicializada. Assim, uma variável inicializada por uma função tem um valor diferente.