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

 
A100:

Сомневаюсь, что компилятор разделяет их (в контексте кода) на явные и неявные. Иначе это исправить было бы просто

Суть в том, что неявный оператор всегда соответствует типу объекта.  Т.е. если объект типа B, то и неявный оператор у него с типом const B&.  Тип A он не принимает.  Но это в C++.
 

Кстати, с типом оператора, похоже, как раз таки все нормально

Сначала он ищет оператор В::, если его нет, тогда уже ищет в А::, если и там нет, тогда считает свой долг выполненным и ничего не делает (хотя указатель в итоге битый) :)

 
Ilya Malev:

если и там нет, тогда считает свой долг выполненным и ничего не делает (хотя указатель в итоге битый) :)

Почему ничего не делает? Он копирует неявным (автоматическим) оператором operator=(const A&), чего делать не должен.

Да и уберите вы наконец эту звёздочку после B, глаз режет )  С этим багом то уже всё выяснили.

 
Alexey Navoykov:

Да и уберите вы наконец эту звёздочку после B, глаз режет )  С этим багом то уже всё выяснили.

Лично мне объектные переменные без звездочки глаз режут )) Одна из противных ошибок - написать A a=new A вместо *а  и долго не понимать в чем дело) Я наоборот показал, что все работает правильно, если последовать Вашему совету и объявить приватный оп.=&. И в этом случае тогда редактор сразу выдаст ошибку. Буду теперь так делать всегда ))

 
Несколько часов потратил на поиск расхождений. Нашел такое
#define PRINT(A) Print(#A + " = " + (string)(A))

void OnStart()
{
  const double Koef =  0.25;
  const int iDelta = 32;
  const double point = 0.00001;
  
  const double high = 1.06736;
  const double low = 1.06676;
  
  const double Avg = (high + low) * 0.5;  
  const double Size = (high - low) * Koef * 0.5;  
  
  PRINT(DoubleToString(Avg - Size - point * iDelta, 5));   // DoubleToString(Avg-Size-point*iDelta,5) = 1.06666
  PRINT(DoubleToString(Avg - (Size + point * iDelta), 5)); // DoubleToString(Avg-(Size+point*iDelta),5) = 1.06667
} 


Особенности double знаю, но не такие, что если поменять порядок сложения (за исключением относительно сильно отличных чисел), то результат будет разный! Просьба объяснить глупцу, из-за чего здесь такое происходит?

В исходнике нужно смотреть только на две нижние строки.

 

Ошибка для разработчиков.

Скрипт не компилируется, определите почему))). Используйте прикрепленный файл.


Этот же файл:


Файлы:
Test1.mq5  9 kb
 
Aliaksandr Hryshyn:

Ошибка для разработчиков.

Скрипт не компилируется, определите почему))). Используйте прикрепленный файл.


Этот же файл:


Все компилируется, удалите строку Error

 
Vladimir Pastushak:

Все компилируется, удалите строку Error

ограничение на длину строки в редакторе

 
Fast528:

ограничение на длину строки в редакторе

Строка не отображается, когда она становиться больше 4095 символов.

 
fxsaber:

Просьба объяснить глупцу, из-за чего здесь такое происходит?

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

(43 -  5) - 7  = (38)39 - 7  = (32)33
 43 - (5  + 7) = 43 - (12)13 = (30)31 

33 != 31