Ошибки, баги, вопросы - страница 246

 
AlexSTAL:

Это метод Класса

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

#include <Indicators\Indicator.mqh>

Понятно. По всей видимости, denkir не объявил #include <Indicators\Indicator.mqh>

Но поиском по Справочнику эта функция всё равно не находится. 

 
Urain:

Так почему же компилятор ругается, в чём неоднозначность вызова?


видимо происходит преобразование типов int в long или наоборот, наверно можно только по количеству параметров или по типам которые автоматически не преобразовываются перезагружать ф-ции

ЗЫ: работайте только с long , передаваемые в качестве параметров int автоматически приведется к long 

 
IgorM:

видимо происходит преобразование типов int в long или наоборот, наверно можно только по количеству параметров или по типам которые автоматически не преобразовываются перезагружать ф-ции

ЗЫ: работайте только с long , передаваемые в качестве параметров int автоматически приведется к long 

Та же самая песня.

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);
  }

Суть в том была чтоб сделать перегрузку функции по всем типам без исключений.

И если тип не соответствует кодовым значениям i и j выдать предупреждение.

 
Urain:

Уважаемые разработчики, ответьте в чём неоднозначность вызова перегруженной функции(именно на это ругается компилятор):

'set' - ambiguous call to overloaded function



да, ошибка, будем исправлять после выхода билда

пока можно использовать так

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:

Нет проблемы не только с перегрузкой int и long, перегрузите любой тип проблема будет та же.

просто компилятор как то по особому обрабатывает явное задание параметра.

сочувствую, извините - я уже недели две МТ5 не запускал, т.к. вижу столько гневных постов после последних трех обновлений, что даже неохота разбираться, что не работает компилятор или я, возможно у меня не тот билд сейчас стоит, что у Вас

вот так:

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);
  }

работает,  билд 362

 
mql5:

да, ошибка, будем исправлять после выхода билда

пока можно использовать так

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

Спасибо. Будем знать.
 
Yedelkin:

Понятно. По всей видимости, denkir не объявил #include <Indicators\Indicator.mqh>

Но поиском по Справочнику эта функция всё равно не находится. 

Этого не достаточно!

Это метод внешнего класса!!!

 
AlexSTAL:

Этого не достаточно!

Это метод внешнего класса!!!

Ну, здесь я не спец. Предпочитаю всё писать вручную. Не могли бы Вы подсказать  denkir'у пошагово, что ему делать.
 

Наверное нужно добавить такое:

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

Но мне не нужен объект упомянутых классов. А нужна простая функция для базового типа string, которую описал.

 
denkir:

Наверное нужно добавить такое:

Но мне не нужен объект упомянутых классов. А нужна простая функция для базового типа string, которую описал.

Повторюсь: я не спец по классам. Но чтобы достучаться до метода класса, коим является метод PeriodStr,  нужно объявить соответствующий класс.  В данном случае - класс CIndicator  (Справочник MQL5 / Стандартная библиотека / Классы для работы с индикаторами / Базовые классы / CIndicator ). Разве не так? 

Причина обращения: