Erros, bugs, perguntas - página 246

 
AlexSTAL:

Este é um método de Classe

https://www.mql5.com/ru/docs/standardlibrary/technicalindicators/cindicator

#Incluir<Indicadores\Indicador.mqh>

Estou a ver. Aparentemente,o denkir não declarou#incluindo<Indicadores\Indicador.mqh>.

Mas uma pesquisa da Referência ainda não é capaz de encontrar esta função.

 
Urain:

Então porque é que o compilador jura, qual é a ambiguidade da chamada?


os tipos aparentemente int a longo ou vice-versa são convertidos, provavelmente só é possível pelo número de parâmetros ou por tipos que não são convertidos automaticamente funções de recarga

SZZ: trabalho apenas com a passagem de longo, int como parâmetros serão automaticamente lançados a longo prazo.

 
IgorM:

os tipos aparentemente int a longo ou vice-versa são convertidos, provavelmente só é possível pelo número de parâmetros ou por tipos que não são convertidos automaticamente funções de recarga

SZY: trabalhe apenas com tipos de int longos e int que passar, pois os parâmetros serão automaticamente convertidos em longos.

A mesma canção.

class CA
  {
public:
   void set(long i,long j,long n){Print("перегрузка long");};
   void set(long i,long j,int n){Print("перегрузка int");};
  };

void OnStart()
  {
//---
   CA a;
   int Int=3;
   long Long=4;
   a.set(1,2,Int);
   a.set(1,2,Long);
  }

O objectivo era fazer a sobrecarga de funções para todos os tipos sem excepções.

E se um tipo não corresponder aos valores de código i e j, gerará um aviso.

 
Urain:

Caros programadores, por favor digam-me que chamada ambígua a uma função sobrecarregada (é sobre isto que o compilador está a jurar):

'set' - chamada ambígua para função sobrecarregada



sim, há um erro, iremos corrigi-lo após o lançamento da construção

por agora pode usar

class CA
  {
public:
   void set(int i,int j,long n){Print("перегрузка long");};
   void set(int i,int j,int n){Print("перегрузка int");};
  };

void OnStart()
  {
//---
   CA a;
   int Int=3;
   long Long=4;
   a.set((int)1,(int)2,Int);
   a.set((int)1,(int)2,Long);
  }
 
Urain:

Não há problema não só com sobrecarga int e longa, sobrecarga de qualquer tipo, o problema será o mesmo.

É apenas o compilador que trata de uma definição explícita de parâmetros de uma forma diferente.

Desculpem, não corro o MT5 há duas semanas, porque vejo tantos posts zangados depois das últimas três actualizações que nem quero saber se o compilador não está a funcionar ou talvez tenha a construção errada, que vocês têm

assim:

class CA
  {
public:
   void set(int i,int j,long n){Print("перегрузка long");};
   void set(int i,int j,double x){Print("перегрузка double");};
  };
  
void OnStart()
  {
//---
   CA a;
   int Int=3;
   double doubl=4;
   a.set(1,2,Int);
   a.set(1,2,doubl);
  }

funciona, construir 362.

 
mql5:

Sim, é um bug, vamos corrigi-lo depois de a construção ser lançada

Entretanto, pode usar isto

a.set((int)1,(int)2,Long);

Obrigado. Teremos isso em mente.
 
Yedelkin:

Estou a ver. Aparentemente,o denkir não declarou#incluindo<Indicadores\Indicador.mqh>.

Mas uma pesquisa do Manual ainda não consegue encontrar esta função.

Isto não é suficiente!

Este é um método de uma classe externa!!!

 
AlexSTAL:

Isso não é suficiente!

Este é um método de classe externo!!!

Bem, aqui não sou especialista, prefiro escrever tudo à mão. Pode dizerao denkir o que fazer, passo a passo.
 

Provavelmente, é necessário acrescentar tal coisa:

#include <Arrays\Array.mqh>
#include <Arrays\ArrayObj.mqh>

Mas eu não preciso de um objecto das aulas mencionadas. O que eu preciso é de uma função simples para a cadeia do tipo base que descrevi.

 
denkir:

Provavelmente, é necessário acrescentar tal coisa:

Mas eu não preciso de um objecto das aulas mencionadas. E eu preciso de uma função simples para o tipo de corda base, que descrevi.

Mas para chegar aos métodos de classe, é necessário declarar a classe correspondente, no nosso caso é a classe CIndicator (MQL5 Reference / Standard Library / Indicator Classes / Basic Classes / CIndicator) . Não é assim?