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

 
Andrey Barinov:
Возвращайте указатели.
Спасибо за идею. Совсем про них забыл.
 
Alexey Kozitsyn:
Спасибо за идею. Совсем про них забыл.

Странно. У меня ваш код выдает ошибку компиляции.

object of 'B' cannot be returned, copy constructor 'B::B(const B &)' not found

на описании функции GetBMember (что на чистом английском говорит о создании копии). Последняя ли версия компилятора?

Когда эта проблема фиксится добавлением копи-конструктора B, то потом Вы можете возвращать const B из метода GetBMember.

Тогда компилятор будет ругаться на попытку сделать Reset возвращаемой переменной:

'Reset' - call non-const method for constant object

 
Stanislav Korotky:

Странно. У меня ваш код выдается ошибку компиляции.

object of 'B' cannot be returned, copy constructor 'B::B(const B &)' not found

на описании функции GetBMember. Последняя ли версия компилятора?

Когда эта проблема фиксится добавлением копи-конструктора B, то потом Вы можете возвращать const B из метода GetBMember.

Тогда компилятор будет ругаться на попытку сделать Reset возвращаемой переменной:

'Reset' - call non-const method for constant object

Этот код - просто пример, написанный в браузере. Просто было интересно, почему компилятор ничего не сообщает. Но уже разобрался.

И, в моем примере вообще нет конструкторов:)

 

     Здравствуйте! 2017.08.03_18:45 GMT+3. Написал файл ООП SignalIchimoku.mqh . Но, когда нужно сделать несложные вычисления до LongCondition() и ShortCondition() в отдельной функции, функция написана, компилятор выдаёт 0 ошибок, 0 предупреждений. А эта функция не работает, вычисления не производятся. Программа не открывает сделки. Проверяю: вставил Print() значения переменной в функцию. Эта функция подобна функциям StateStoch(int ind), ExtStateStoch(int ind) и CompareMaps() в SignalStoch.mqh , стандартном файле из стандартной библиотеки. В стандартном файле всё работает, а у меня не работает. Почему? Это опять "простые правила"? Кто знает, -- подскажите. Если нужны подробности или возникли вопросы, -- пишите. 18:59 GMT+3.

Файлы:
 

CCanvas. Маленький косяк в реализации функции круга FillCircle. Он на один пиксель уже, это видно из этой GIF-анимации:

И еще очень неразумно построен алгоритм, т.к. приблизительно 30 % точек рисуются дважды. Это легко устранить если переместить две строчки кода, при этом быстродействие вырастает в среднем на 30%.
Вот оригинальная версия FillCircle:

void CCanvas::FillCircle(int x,int y,int r,const uint clr)
  {
   int f   =1-r;
   int dd_x=1;
   int dd_y=-2*r;
   int dx  =0;
   int dy  =r;
//--- draw
   while(dy>=dx)
     {
      LineHorizontal(x-dx,x+dx,y-dy,clr);
      LineHorizontal(x-dx,x+dx,y+dy,clr);
      LineHorizontal(x-dy,x+dy,y-dx,clr);
      LineHorizontal(x-dy,x+dy,y+dx,clr);
      //---
      if(f>=0)
        {
         dy--;
         dd_y+=2;
         f+=dd_y;
        }
      dx++;
      dd_x+=2;
      f+=dd_x;
     }
  }

А вот исправленная:

void CCanvas::FillCircle(int x,int y,int r,const uint clr)
  {
   int f   =1-r;
   int dd_x=1;
   int dd_y=-2*r;
   int dx  =0;
   int dy  =r;
//--- draw
   while(dy>=dx)
     {
      LineHorizontal(x-dy-1,x+dy,y-dx,clr);
      LineHorizontal(x-dy-1,x+dy,y+dx,clr);
      //---
      if(f>=0)
        {
         LineHorizontal(x-dx-1,x+dx,y-dy,clr);
         LineHorizontal(x-dx-1,x+dx,y+dy,clr);
         dy--;
         dd_y+=2;
         f+=dd_y;
        }
      dx++;
      dd_x+=2;
      f+=dd_x;
     }
  }
 

Насчет pending order is deleted (not enough money)

Корректная работа советника, это когда не происходит ошибок, во время его работы. 

pending order is deleted (not enough money) - это ошибка. 

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

Например, мы установили и рассчитали, что для открытия отложенного стопового ордера на продажу по цене 1.500 достаточно средств. (По цене 1.499 уже нет.)

Текущая цена 1.501.

Следующий тик и мы имеем цену 1.499.

Попытка открытия ордера и ошибка.

Следовательно изначально заложена такая ситуация, когда возникновение этой ошибки на 100% обойти нельзя. 

Или я что-то упустил?

 

не могу понятьь как подтянуть файлы mqh из сосетнего каталога в папке експерртс.

как из папки One подтянуть файлы mqh в папку Two ?

 
Vladimir Pastushak:

не могу понятьь как подтянуть файлы mqh из сосетнего каталога в папке експерртс.

как из папки One подтянуть файлы mqh в папку Two ?


решение найдено. Если файл, к которому нужно подключить инклудник, находится в Test\One, а инклудник в Test\Two, то...

Вот так:

#include "..\Two\name.mqh""
Получается: ..\ - из One выходим в Test и Two\name.mqh - из Test заходим в Two и выбираем файл name.mqh
 
в профиле не отображает "мои сообщения"

и в профилях других людей
 
Vladimir Pastushak:

решение найдено. Если файл, к которому нужно подключить инклудник, находится в Test\One, а инклудник в Test\Two, то...

Вот так:

Получается: ..\ - из One выходим в Test и Two\name.mqh - из Test заходим в Two и выбираем файл name.mqh

Бывают и такие конструкции:

#include "..\..\Two\name.mqh"
Причина обращения: