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

 

ошибка

уже исправлена, пожалуйста подождите выхода нового билда.

им виднее. ошибка так ошибка
 

МетаEditor добавляет точку к имени файла

Последовательность действий:

  • В Проводнике создать Текстовый документ Test.txt
  • В MetaEditor открыть его через Файл\Открыть
  • Далее выбрать Файл\Сохранить как...


В результате имя файла будет Test2..txt вместо Test2.txt

Блокнот при прочих равных условиях не добавляет к имени файла лишних точек
 

fxsaber:

уже исправлена, пожалуйста подождите выхода нового билда.

Нужно смотреть как именно исправлена потому что в аналогичном случае компилятор Microsoft неспроста требует вынести реализацию метода (в данном случае operator =) за пределы класса

https://www.mql5.com/ru/forum/1111/page2001#comment_5679732

https://www.mql5.com/ru/forum/1111/page2001#comment_5680465

Ошибки, баги, вопросы
Ошибки, баги, вопросы
  • 2017.08.29
  • www.mql5.com
Общее обсуждение: Ошибки, баги, вопросы
 

Вроде, это неправильное поведение языка, т.к. ограничивает возможности

struct A {};

class B
{
public:
  const A a;
  
  B( const A &in ) : a(in) // 'a' - constructor not defined
  {
  }
};


Мне нужно задать const-поле в виде структуры. Думал, оператор копирования прокатит, а компилятор вместо этого хочет конструктор, потому что по синтаксису похоже. Но это неправильно.

 
Неправильное сообщение об ошибке
struct A
{
  const int i;
};

void OnStart()
{
  A a1, a2;
  
  a1 = a2; // '=' - not allowed for objects with protected members or inheritance
}
 

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

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

fxsaber, 2017.05.19 22:35

TimeTradeServer может возвращать всякую ерунду. Например, значение меньше, чем TimeCurrent. Это сводит полностью на нет его практическое применение.

Если правильно понимаю идею, то TimeTradeServer при работающем терминале должен был вычислять прошедшее время, после получения TimeCurrent и прибавлять эту разность, своего рода эмулируя будущие значения TimeCurrent.

Сейчас же запустив советник

#define TOSTRING(A) #A + " = " + (string)(A) + "\n"

void OnInit()
{
  EventSetTimer(1);
}

void OnTimer()
{
  Comment(TOSTRING(TimeTradeServer()) + TOSTRING(TimeCurrent()));
}

можно увидеть любую ерунду

Обратите внимание на даты.


Так и возвращает TimeTradeServer локальное время. Еще раз прошу исправить на правильное поведение.
 
fxsaber:

Вроде, это неправильное поведение языка, т.к. ограничивает возможности

Мне нужно задать const-поле в виде структуры. Думал, оператор копирования прокатит, а компилятор вместо этого хочет конструктор, потому что по синтаксису похоже. Но это неправильно.

Это правильно потому что однозначно (в списке инициализации всегда конструктор, а не оператор), неправильно другое:

struct S {
        S()                        { Print( __FUNCSIG__ ); }
        void operator=( const S& ) { Print( __FUNCSIG__ ); }
};
void OnStart()
{
        S s;
        S s1 = s;

}

Результат:

void S::S()                             (1)
void S::S()                             (2)
void S::operator=(const S&)   (3)

в то время как С++ не выводит строки (2) и (3), а значит не заменяет отсутствующий конструктор копирования на симбиоз конструктора по умолчанию и оператора присваивания

 

Если у BMP-объекта удалили его ресурс, а затем снова создали, то BMP-объект свой ресурс больше не видит. Это ошибка. Сейчас приходится удалять объект и заново его же создавать.

 
fxsaber:

Если у BMP-объекта удалили его ресурс, а затем снова создали, то BMP-объект свой ресурс больше не видит. Это ошибка. Сейчас приходится удалять объект и заново его же создавать.

Код покажете? Зачем удалять ресурс, можно его перезалить / изменить без удаления.
 

Ситуация:

Рыночная позиция стороннего эксперта была УСПЕШНО выбрана OrderSelect(ticketNumber,SELECT_BY_TICKET) и предпринимается попытка в цикле его закрыть (выбор ордера по тикету был сделан перед циклом попыток закрытия).


Получаю ошибку:

2017.11.10 06:00:33.806 ExpertName EURCAD,H1: unknown ticket 1846978258 for OrderClose function

Тикет в норме


Естественно, что родной эксперт мог закрыть этот ордер самостоятельно, поэтому

на каждой итерации цикла делается проверка

if(OrderCloseTime()!=0) break;


которая не дает желаемого результата и сообщение о неправильном номере тикета выдается все 30 раз цикла.

Кривые руки или это баг с потерей выбранного ордера ?

Или номер ошибки может не совсем точно отражать ситуацию/проблему?


Update:

Выяснил, что позиция закрывается-таки не родным экспертом, а тем которым мы закрываем.

Однако, до возникновения циклической ошибки 4108 выдается однократно ошибка 3 (хотя до записи об ошибке 3 в журнале записано, что ордер был закрыт).