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

 
A100 #:

Ясно, значит конкретных контр-примеров - нет

Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий

Ошибки, баги, вопросы

fxsaber, 2022.09.15 14:46

Когда где-то в коде вижу запись

a.i  = 1;

сразу понимаю, что объект не const.

Вот на подобные вырванные из контекста фразы запросто могу создавать контр-примеры, потому что это, действительно, просто. К сожалению, вы не поняли ни слова про самоконтроль, ни про принадлежность кода. Говорим о разном, видимо. Неинтересно. Что касается баг-репортов, лью на эту мельницу без фанатизма. Но это хорошо, что вам все настолько ясно.

 

Снова про порядок расположения перегрузок в классе.  В примере классы X1,X2,X3 отличаются только порядком расположения перегрузок метода f1. Скрипт вызывает данный метод для трех объектов соответствующих классов. Но каждый раз вызываются разные перегрузки.

Для X1 и X2 вызывается перегрузка, определенная после f1(X1<Y> & p) - которая вообще не вызывается.

Для X3 вообще вызывается   A::f1(void*), хотя она перекрыта X3::f1(void*) !!!!

(b3434)
class A
  {
public:
   void              f1(void * p) {Print(__FUNCSIG__);}
  };

template <typename T> class X1: public A
  {
public:
   template <typename Y> void  f1(X1<Y> & p) {}
   void              f1(T *  p) {Print(__FUNCSIG__);}
   void              f1(void * p) {Print(__FUNCSIG__);}
  };

template <typename T> class X2: public A
  {
public:
   void              f1(T *  p) {Print(__FUNCSIG__);}
   template <typename Y> void  f1(X2<Y> & p) {}
   void              f1(void * p) {Print(__FUNCSIG__);}
  };

template <typename T> class X3: public A
  {
public:
   void              f1(T *  p) {Print(__FUNCSIG__);}
   void              f1(void * p) {Print(__FUNCSIG__);}
   template <typename Y> void  f1(X3<Y> & p) {}
  };


void OnStart()
  {
   X1<A> x1;
   X2<A> x2;
   X3<A> x3;

   x1.f1(&x1);       // void X1<A>::f1(A*)
   x2.f1(&x2);       // void X2<A>::f1(void*)
   x3.f1(&x3);       // void A::f1(void*)
  }


Вопрос к разработчикам - вы будете это исправлять, или мне просто запостить этот пример в ветку "Особенности MQL"?

 

Извиняюсь, если уже было, но есть непоследовательность в сообщениях компилятора:  в обоих случаях вызывается один и то же метод, но в одном месте есть предупреждение, в другом нет. (b3434)

class A
  {
public:
   void              f1(A&) {Print(__FUNCSIG__);}
  };

class A2: public A
  {
public:
   void              f1(A2&) {Print(__FUNCSIG__);}
  };
  
class A3: public A {};

void OnStart()
  {
   A  a;
   A2 a2;
   A3 a3;

//warning: deprecated behavior, hidden method calling will be disabled in a future MQL compiler version
   a2.f1(a);         // void A::f1(A&)

//no warning - ?
   a2.f1(a3);        // void A::f1(A&)
  }
 
Переустановил приложение МТ4, и теперь никак не могу попасть в свой демо счёт. Пишу логин и пароль, а система отвечает: "авторизация не удалась". Что такое происходит, и как исправить?
 
Sergey Golubev #:
Есть ветка, где пользователь сообщал об ошибке с хранилищем: Problems with MQL5 Storage
Я там отвечал в ветке (у меня ошибки с хранилищем небыло).
То есть, это было что-то только у него.

Он проблему нашел у себя сам, поменяв пароль - идею взял с этой ветки: Error In MQL5 Storage / Cloud Protector / MT5 Editor Solution 
(там всего один пост - краткое перечисление возможных ошибок с хранилищем, и как их исправить).

Спасибо, получилось.

Удалось активировать MQL5 Storage путем изменения пароля на 8ми значный. Затем изменил пароль обратно, все продолжило работать.

 
114996791 #:
Переустановил приложение МТ4, и теперь никак не могу попасть в свой демо счёт. Пишу логин и пароль, а система отвечает: "авторизация не удалась". Что такое происходит, и как исправить?
Если вы давно не пользовались демо счетом, то он становится неактивным и пропадает.
 

Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий

Ошибки, баги, вопросы

mktr8591, 2022.09.10 13:52

Да, точно. Попробовал так
class A {};

template <typename T> class Z
  {
public:
   void              f(const Z &) {}   
   template<typename U>
   void              f(const Z<U> &) {}

   template<typename U>
   void              f2(const Z<U> &) {}
   void              f2(const Z &) {}   
  };


void OnStart()
  {
   Z<A> a, b;
   a.f(b);      // f(const Z<U> &) called!
   a.f2(b);     // f2(const Z &) called!
  }

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

Это надо исправить.


Изменения в релизе b3440: теперь в обоих случаях вызывается корректная перегрузка (const Z &).

Но осталась одна проблема - вызов метод через разыменованием аргумента-указателя. При явном разыменовании вызывается правильная перегрузка f(const Z &), а при неявном - неправильная f(const Z<U> &):

class A {};

template <typename T> class Z
  {
public:
   void              f(const Z &) {Print(__FUNCSIG__);}
   template<typename U>
   void              f(const Z<U> &) {Print(__FUNCSIG__);}
  };

void OnStart()
  {
   Z<A> a, b, *p = &b;    

   a.f(*p);     // f(const Z &) called!
   a.f(p);      // f(const Z<U> &) called!
  }
 
Не думал, что еще возникнет вопрос на тему double.
union UNION
{
  uchar Bytes[sizeof(double)];
  double d;
};

void OnStart()
{
  uchar Bytes[] = {61, 200, 247, 97, 0, 0, 0, 0};
  
  UNION Union;
  
  ArrayCopy(Union.Bytes, Bytes);
  
  Print(Union.d); // 8.1205628353576915e-315
  Print(DBL_MIN); // 2.2250738585072014e-308
  
  Print(Union.d > 0); // true
  Print(Union.d < DBL_MIN); // true
}

Получил положительное число, которое меньше DBL_MIN. Видимо, в справке ошибка.

Константа

Описание

Значение

DBL_MIN

Минимальное положительное значение, которое может быть  представлено типом double

2.2250738585072014e-308

DBL_MIN_10_EXP

Минимальное десятичное значение степени экспоненты

(-307)

 
fxsaber #:
Не думал, что еще возникнет вопрос на тему double.

Получил положительное число, которое меньше DBL_MIN. Видимо, в справке ошибка.

Да, ошибка. минимальное число  2 −1074≈ 4.9406564584124654 × 10 −324

А DBL_MIN - минимальное нормализованное

 

я чтото сделал и теперь при тестировании лог выводится не в журнал а локал агент лог . как вернуть в журнал

?

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