Erros, bugs, perguntas - página 49

 

Porque é que o compilador não vê a diferença entre int e cor.

   void              CreateLabel(int x,int y,color COLOR);   
   void              CreateLabel(int x,int y,int n);

Redefino uma função, repreende-me (diz que tenho o cuidado de misturar os pedais).

'CreateLabel' - ambiguous call to overloaded function with the same parameters
Se houvesse apenas parâmetros por defeito, mas não há ambiguidades, basta definir o tipo do parâmetro passado e seguir em frente.
 
Urain:

Porque é que o compilador não vê a diferença entre int e cor.

Eu sobrepujo uma função, ele jura (diz com cuidado para misturar os pedais).

Se houvesse apenas parâmetros por defeito, mas não há ambiguidades, basta definir o tipo do parâmetro passado e ir.
Neste caso, o compilador queixa-se de que criou duas funções com o mesmo nome, e os parâmetros passados não têm nada a ver com isso.
 
sergey1294:
Neste caso, o compilador queixa-se de ter criado duas funções com o mesmo nome, e os parâmetros que passa não têm nada a ver com isso.

Nesse caso, leia o que significa a palavra "sobrecarga".

SZ, bem como"sobrecarga da função".

Документация по MQL5: Основы языка / Функции / Перегрузка функций
Документация по MQL5: Основы языка / Функции / Перегрузка функций
  • www.mql5.com
Основы языка / Функции / Перегрузка функций - Документация по MQL5
 
Urain:

Uma pergunta à comunidade de escritores, não um erro ou um insecto, mas uma pergunta que possa sugerir o que...

Quero obter o nome do ponteiro dentro da aula, mas não funciona.

Em geral, a essência da questão é que eu quero que o nome da cadeiado objecto gráfico seja atribuído automaticamente.

Quero obter automaticamente um nome de corda para ele.

Ao instalar o objecto gráfico do método de classe, o nome deve ser atribuído automaticamente, dependendo do cursor.

Ainda não sei como o fazer, penso que o podemos fazer do zero.


Em teoria, existem duas formas principais de nomear automaticamente um objecto (com várias variações sobre o tema, ao implementá-lo):

1. A geração de nomes é baseada numa lista numerada

Uma classe separada faz a nomeação do objecto, e mantém os "numeradores" (que podem ser para todos os objectos ou para um grupo específico de objectos).

Neste caso, o nome é formado com base em (de preferência): tipo de objecto, nome do símbolo (par de moedas), notação textual de TF e número de série do objecto (tirado do numerador).

Neste caso, dependendo da implementação, é possível rastrear a presença do objecto no gráfico, e não é possível.

2. O nome é formado com base na data e hora da criação do objecto.

O nome sob esta abordagem pode ser formado com base em: tipo de objecto, nome do símbolo, notação de texto TF e chave (formada com base na data e hora).

PS

Na primeira variante (na minha opinião) seria mais razoável realizar em classe e ciclo completo de gestão de objectos (criação, modificação e remoção)...

 
Urain:

Nesse caso, leia o que significa "sobrecarga".

ZS Bem, bem como"sobrecarga da função".

Eu não sabia que isso era possível.
 
sergey1294:
Não sabia que isto era possível.

Polimorfismo e sobrecarga de funções são princípios básicos do OOP que devem estar presentes em qualquer língua que se respeite a si próprio.

Polimorfismo

O polimorfismo é um fenómeno quando uma função (método) com o mesmo nome corresponde a um código de programa (código polimórfico) diferente, dependendo do objecto de classe que é utilizado para chamar o método. O polimorfismo é assegurado pela alteração da implementação do método da classe ancestral na classe descendente com preservação obrigatória da assinatura do método. Isto assegura que a interface da classe mãe é preservada inalterada e permite a ligação de um nome de método em código com classes diferentes - o método com o nome dado é retirado do objecto da classe a partir da qual a chamada é feita. Este mecanismo chama-se encadernação dinâmica (ou tardia) - em contraste com a encadernação estática (precoce), que é feita em tempo de compilação.

Sobrecarga de funções

Sobrecarga de procedimentos e funções - a capacidade de utilizar subprogramas com o mesmo nome: procedimentos ou funções em linguagens de programação.


Exemplo da biblioteca padrão de classes comerciais, classe CAccountInfo:

double MarginCheck(const string symbol,ENUM_POSITION_TYPE trade_operation,double volume) const;
double MarginCheck(const string symbol,ENUM_ORDER_TYPE trade_operation,double volume) const;
 
ddd06:

Passei muito tempo a falar com as respeitadas Metaquotes e a provar-lhes que tinham uma falha, e elas disseram-me que não havia nenhuma falha.

No entanto, mantive-me fiel às minhas armas e eles aconselharam-me a perguntar à comunidade.

Assim, temos um indicador e um Consultor Especialista que toma os valores do indicador.

Iniciar o teste para EURUSD de 01.07.2010 a 02.07.2010 em М1

Olhamos para o registo e vemos que os valores de um buffer mudam, e o outro não.

Isto dura uma hora e depois o segundo tampão está vivo, mas se olharmos para os valores do indicador, não coincide.

Até tentei alterar a conta e remontar a história, mas isso não ajudou.

Aqui está um link para o meu terminal em rar 90mbhttp://dl.dropbox.com/u/6290215/MetaTrader%205%201111.rar, tudo está aí instalado

E o indicador com o conselheiro no anexo

Apresentou um código com um erro. Naturalmente, é o seu código que dá a informação errada. Ignorou as nossas observações sobre a correcção do erro, oferecendo cada vez um novo código e cada vez com um erro.
 
Urain:

Porque é que o compilador não vê a diferença entre int e cor.

Eu sobrepujo uma função, ele jura (diz com cuidado para misturar os pedais).

OK, haveria parâmetros por defeito, mas não há ambiguidades, basta definir o tipo do parâmetro passado e ir em frente.
Há realmente um problema - vamos analisar o assunto.
 
Urain, obrigado pela sua mensagem. O erro foi corrigido.
 
stringo:
O código foi fornecido com um erro. Naturalmente, este é o seu código que dá informações erradas. Ao mesmo tempo, ignorou os nossos comentários sobre a correcção de erros, oferecendo cada vez um novo código e cada vez com um erro.

No entanto, se me tivesse dito que não deveria haver sincronização e que deveríamos incorporá-la no código...

Em vez disso, disse teimosamente que tudo coincide.

mas TimeToString(time[0],TIME_DATE|TIME_MINUTES)," buf1-",buf1[1]," buf2-",buf2[1]) em vez de TimeToString(time[1],TIME_DATE|TIME_MINUTES)," buf1-",buf1[1]," buf2-",buf2[1]));

isto é certamente um erro, mas não afectou a questão.

Vou adiar a adição do novo indicador para verificar o quão errado eu estava.

Ou seja, estava a dizer que tudo coincide e corrigiu o código do Expert Advisor. Mas na realidade, nada coincide e devemos fixar o código do indicador (a fim de integrar a sincronização no mesmo).