Quaisquer perguntas de recém-chegados sobre MQL4 e MQL5, ajuda e discussão sobre algoritmos e códigos - página 1098

 
Grigori.S.B:

Por favor, diga-me por que o compilador gera um aviso no seguinte código de script de teste MQL4:

Um aviso na linha 27 sobre o descasamento de tipos de dados. Ambas as variáveis têm o mesmo tipo de int. Abaixo está uma captura de tela da compilação do roteiro.

Se eu substituir a linha 27 por

o aviso não aparece.

Qual é o truque?

Não há truque algum. A variável t é declarada como dupla

Na verdade, isto não tem significado em nenhum lugar.

 
Alexey Viktorov:

E não há truque algum. A variável t é declarada como dupla

Muito obrigado, estou trabalhando muito - é hora de descansar.

Alexey Viktorov:

Na verdade, isto não tem nenhum valor em nenhum lugar.

É uma variável tampão utilizada para armazenar temporariamente o resultado durante a triagem.

 

Como estes métodos de inicialização são diferentes?

class Klas{};
Klas *Klas_
Klas Klas_
 
Seric29:
1. class Klas{};
2. Klas *Klas_
3. Klas Klas_

1. descrição do tipo (classe)

2. declaração do tipo (classe) ponteiro

3. declaração de instância de classe - isto é inicialização, porque o construtor Klas() será chamado se não for descrito, então o construtor padrão será chamado - ajuda

Seric29:

Como estes métodos de inicialização são diferentes?

ou seja, apenas a etapa 3 de inicialização.

 
Igor Makanu:

1. descrição do tipo (classe)

2. declaração do tipo (classe) ponteiro

3. declaração de instância de classe - isto é inicialização, porque o construtor Klas() será chamado se não for descrito, então o construtor padrão será chamado - ajuda

ou seja, somente a cláusula 3 é inicializada.

Eu não vi como inicializá-los na ajuda, talvez eu apenas assisti e não entendi, já que as aulas estão mal descritas na ajuda - eu li 30 vezes.

Sim, de fato após a aula, pois não tenho entradas, mas eles colocaram este código no OnStart

   CFoo foo1(TimeCurrent());     // явный вызов параметрического конструктора 
   CFoo foo2();                  // явный вызов параметрического конструктора с параметром по умолчанию 
   CFoo foo3=D'2009.09.09';      // неявный вызов параметрического конструктора 
   CFoo foo40(foo1);             // явный вызов конструктора копирования 
   CFoo foo41=foo1;              // неявный вызов конструктора копирования 
   CFoo foo5;                    // явный вызов конструктора по умолчанию (если конструктор по умолчанию отсутствует, 
                                 // то вызывается параметрический конструктор с параметром по умолчанию) 
//--- допустимые варианты получения указателей CFoo 
   CFoo *pfoo6=new CFoo();       // динамическое создание объекта и получение указателя на него 
   CFoo *pfoo7=new CFoo(TimeCurrent());// ещё один вариант динамического создания объекта 
   CFoo *pfoo8=GetPointer(foo1); // теперь pfoo8 указывает на объект foo1 

Entenda-o como quiser. Não sei por que devo explicar dessa forma.

CFoo *pfoo6=new CFoo();       // динамическое создание объекта и получение указателя на него

Eu não entendo porque preciso deste ponteiro.

CFoo *pfoo7=new CFoo(TimeCurrent());// ещё один вариант динамического создания объекта 

E para que serve isto? O que quer que você queira e o que você acha que isto significa.

CFoo foo3=D'2009.09.09';      // неявный вызов параметрического конструктора

Eu também não entendo o que isto significa.

CFoo foo40(foo1);             // явный вызов конструктора копирования 
Também não está claro para que serve. Eles não a teriam carregado, mas teriam escrito a idéia normalmente e de forma simples.
 

Saudações.

Você poderia me dizer como são calculados os níveis horizontais para a grade em mt4 e em mt5?

 
Seric29:

E por que inicializar via ponteiro, eu não vi nada na ajuda de como inicializá-los talvez eu olhasse e não entendesse, porque as aulas são mal descritas na ajuda lida 30 vezes.

um ponteiro é um ponteiro, inicialização é inicialização

entender primeiro este código:

1. int a;
2. int a = 5;

O que é inicialização neste código e o que é uma declaração variável?

Quando a memória está sendo alocada?

e depois usar esse conhecimento para discutir o OOP e as indicações para uma classe e as indicações para um objeto.


ir embora, por alguma razão eu não posso responder perguntas elementares

 
Igor Makanu:

um ponteiro é um ponteiro, uma inicialização é uma inicialização

entender primeiro este código:

o que neste código é inicialização e o que é declaração variável?

Quando a memória está sendo alocada?

e depois usar esse conhecimento para discutir o OOP e as indicações para uma classe e as indicações para um objeto.


por alguma razão, não posso responder a perguntas elementares.

Aqui está um exemplo simples e claro. A 1ª variante é a declaração de alocação de variável e memória (variável armazena valor arbitrário padrão de lixo ou número de setor ou endereço em C++ aqui eu não sei), a 2ª variante é a inicialização.

E para que servem estes indicadores e o que comer com eles também deveria ter sido explicado normalmente.

Ponteiros para uma classe e ponteiros para um objeto

Eu também deveria ter entendido o que eles são. Vou procurar na rede e ver se há algo.

 
Andrey Sokolov:

Saudações.

Como calcular os níveis horizontais para uma grade em mt4 e em mt5?

Se você quiser detectar um nível horizontal, basta abrir/fechar um novo nível e colocar um novo pedido, ou colocar uma grade de pedidos pendentes levando em conta o número máximo de pedidos e, em seguida, exibir essa grade.


lá, em geral, qualquer código compacto é mais fácil de visualizar e modificar para suas próprias tarefas


Não sei se você já tentou e eu nunca tentei muitos programas e acho que é mais difícil de usar no TS simples, mas talvez você nunca tenha experimentado.

 
Seric29:

Aqui está um exemplo simples e claro. A 1ª opção é declaração de variável e alocação de memória (variável armazena valor arbitrário padrão de lixo ou número de setor ou endereço em C++ aqui não se sabe), a 2ª opção é inicialização.

E por que estas indicações para digitar e o que comê-las também deveriam ter sido explicadas corretamente.

aalocação de memória estará no Exemplo 1 e no Exemplo 2

exemplo 2 é uma declaração e iniciação, exemplo 1 é apenas uma declaração

a classe é a mesma, a classe é um tipo definido pelo usuário que contém campos (propriedades) e métodos de trabalho com esses campos

um ponteiro para uma classe é uma declaração, mas sem inicialização e sem alocação de memória para o tipo (classe)

pointer = nova MyClass(); - esta é uma declaração e inicialização, que cria uma nova instância da classe e esta instância será devolvida como um link para um objeto (não é exatamente um link, em MQL não é ... importante e assim você fica confuso)

....

se você não quiser lê-lo, pelo menos use este meu posto para modificar seu exemplo:

CFoo *pfoo6=new CFoo();

para

CFoo *pfoo6;
pfoo6 = new CFoo();
CFoo *pfoo_7 =  pfoo6;

e tente entender o que acontece - quando você atribui a última linha a..... mas ainda lê, apenas perguntar nos fóruns não é uma opção

Razão: