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

 

У меня тяжелый случай - логика, доступная мне, отсутствует.

Есть функция с такими входными

int Tree_Calcf(int &arr_List_Buy[],int &arr_List_Sell[],int Vektor_ZZ,int Variant_Tree_Buy=0,int Variant_Tree_Sell=0)
{
int CalcBuy=1;
int CalcSell=1;
//Print("Rez_Tree_Calc=",Rez," - f"," Vektor_ZZ=",Vektor_ZZ," CalcSell=",CalcSell);

if (Vektor_ZZ==1)
{
if(Variant_Tree_Buy==1)
{
                        if(arr_List_Buy[272]< 0.5 && arr_List_Buy[100]< 0.5 && arr_List_Buy[249]< 0.5 && arr_List_Buy[147]< 0.5 && arr_List_Buy[350]< 0.5 && arr_List_Buy[383]< 0.5 && arr_List_Buy[463]< 0.5 && arr_List_Buy[250]< 0.5 && arr_List_Buy[283]< 0.5 && arr_List_Buy[204]< 0.5 && arr_List_Buy[499]< 0.5 && arr_List_Buy[296]< 0.5 && arr_List_Buy[486]< 0.5 && arr_List_Buy[209]< 0.5 && arr_List_Buy[453]< 0.5 && arr_List_Buy[333]< 0.5 && arr_List_Buy[137]< 0.5 && arr_List_Buy[127]< 0.5 && arr_List_Buy[191]< 0.5 && arr_List_Buy[395]< 0.5 && arr_List_Buy[224]< 0.5 && arr_List_Buy[432]< 0.5 && arr_List_Buy[378]< 0.5 && arr_List_Buy[25]< 0.5 && arr_List_Buy[441]< 0.5 && arr_List_Buy[2]< 0.5 && arr_List_Buy[465]< 0.5 && arr_List_Buy[231]< 0.5 && arr_List_Buy[482]< 0.5 && arr_List_Buy[324]< 0.5) CalcBuy=0; //(0.83965634 0.16034366)
//--Вырезана часть аналогичного кода - листья дерева
}

//V03
if(Variant_Tree_Buy==2)
{
//---Вырезан код, он не активируется в момент ошибки}
//--Дерево на базе активации листьев без фильтров
if(Variant_Tree_Buy==3)
{
//---Вырезан код, он не активируется в момент ошибки}
}
//----TreeList_Sell
if(Vektor_ZZ==-1)
{
if(Variant_Tree_Sell==1)
{

                        if(arr_List_Sell[127]< 0.5 && arr_List_Sell[275]< 0.5 && arr_List_Sell[42]< 0.5 && arr_List_Sell[389]< 0.5 && arr_List_Sell[121]< 0.5 && arr_List_Sell[410]< 0.5 && arr_List_Sell[39]< 0.5 && arr_List_Sell[348]< 0.5 && arr_List_Sell[358]< 0.5 && arr_List_Sell[143]< 0.5 && arr_List_Sell[396]< 0.5 && arr_List_Sell[364]< 0.5 && arr_List_Sell[354]< 0.5 && arr_List_Sell[160]< 0.5 && arr_List_Sell[324]< 0.5 && arr_List_Sell[46]< 0.5 && arr_List_Sell[38]< 0.5 && arr_List_Sell[397]< 0.5 && arr_List_Sell[295]< 0.5 && arr_List_Sell[48]< 0.5 && arr_List_Sell[322]< 0.5 && arr_List_Sell[363]< 0.5 && arr_List_Sell[40]< 0.5 && arr_List_Sell[420]< 0.5 && arr_List_Sell[43]< 0.5 && arr_List_Sell[230]< 0.5 && arr_List_Sell[10]< 0.5 && arr_List_Sell[471]< 0.5 && arr_List_Sell[507]< 0.5 && arr_List_Sell[259]< 0.5) CalcSell=0; //(0.78952321 0.21047679)





//--Вырезана часть аналогичного кода - листья дерева
} if(Variant_Tree_Sell==2) { //---Вырезан код, он не активируется в момент ошибки } //--Дерево на базе активации листьев без фильтров if(Variant_Tree_Sell==3) { //---Вырезан код, он не активируется в момент ошибки } } int Rez=0; if(Vektor_ZZ==1)Rez=CalcBuy; if(Vektor_ZZ==-1)Rez=CalcSell; Print("Rez_Tree_Calc=",Rez," - f"," Vektor_ZZ=",Vektor_ZZ," CalcSell=",CalcSell); return Rez; }

Так вот, эта Функция иногда выдает значение 769

2020.03.01 15:54:23.500 Core 1  2019.11.13 22:57:00   Rez_Tree_Calc=769 - f Vektor_ZZ=-1 CalcSell=769

если раскомментировать первый принт

//Print("Rez_Tree_Calc=",Rez," - f"," Vektor_ZZ=",Vektor_ZZ," CalcSell=",CalcSell);

то выдается правильное значение.

Если урезать функцию, убрав просто код, неактивирующийся в момент вызова функции в момент ошибки, то ошибки так же нет.

Явно ошибка компилятора - разработчики, кому послать полную функцию, а то на форуме она не умещается.

 
Форум искажает форматирование кода, править не получается.
 
Оказывается, добавление круглых скобок осуществляет чудотворящее действие по решению вышеописанных проблем:

class A{};

template<typename T>
class B{
public:
   B(int &){}
   B(long){}
   B(int, int, int){};  
   B(const B&){}
   B(const A*){}
};

// template class type
B<A*> test_b_class_class(){
   B<A*> b(1);
   int x = 22;
   
   return (B<A*>(1));             // Fixed Compile Error: ambiguous call to overloaded function with the same parameters: "B(long)" and "B(const A*)"
   return (B<A*>(1,2,3));         // Fixed Compile Error: only one argument is acceptable, argument should be castable to int
   return (B<A*>(x));             // Fixed Compile Error: argument is passed by value instead of by reference.
   return (B<A*>((A*)NULL));      // Fixed Compile Error: 'int' - invalid cast operation        
   return (B<B<B<long>>>(1));     // Fixed Compile Error: OK, template parameter type does not provide any effort on compilation result
   
   return b;
};

B<A*>* test_b_ptr_ptr(){
   B<A*> b(1);
   
   return &(B<A*>(1));            // Fixed Compile Error: '&' - illegal operation use
   return &b;                 
};


void OnStart (){    
   // template class type
   B<A*> b0 = test_b_class_class();
   B<A*>* b_ptr = test_b_ptr_ptr();
}
 
Sergey Dzyublik:
Оказывается, добавление круглых скобок осуществляет чудотворящее действие по решению вышеописанных проблем:

Только так и пишу.

 
Баг МТ5 (build 2345) ошибка компиляции для возвращаемого значения шаблонной функции, когда возвращаемое значение - internal class, расположенный внутри шаблонного класса, тип параметра которого задается типом аргумента шаблонной функции:

template<typename T>
class A{
public:
   class B{
   public:
      B(){};
      B(B&){};
   };
   
   A(){};
   A(A&){}
};

class C{
public:
   class D{
   public:
      D(){}
      D(D&){}
   };
};


template<typename T>
A<int>::B* test_b_ptr(const T n){             //OK
   A<T>::B* ptr = new A<int>::B();
   return ptr;
}

template<typename T>
A<int>::B test_b_in_place_class(const T n){   //OK
   return (A<T>::B());
}

template<typename T>
A<int>::B* test_b_in_place_ptr(const T n){    //OK
   return &(A<T>::B());
}


template<typename T>
A<T> test_a_template(const T n){              //OK
   A<T> a;
   return a;
}

template<typename T>
C::D test_d(const T n){                       //OK
   C::D d;
   return d;
}

template<typename T>
A<T>::B test_b_template(const T n){          //'A' - unexpected token, probably type is missing? 
   A<T>::B b;
   return b;
}



void OnStart (){ 
   test_b_ptr(1);
   test_b_in_place_class(1);
   test_b_in_place_ptr(1);
   
   
   test_a_template(1);
   test_d(1);
   test_b_template(1);                       // Compile Error
}
 
// "MetaTrader 5\MQL5\Files\Reports\2020.03.01 03.43.46ExpertName (琼㹤⸱㠰㐹㰷琯㹤琼㹤⼼摴㰾摴ㄾ〮ㄹ㔷⼼摴㰾摴㈾㄰⸹㠰ㄮ‴㈰〺㨰〰ㄮ㐱⼼摴㰾摴ㄾ〮〹㐵⼼摴㰾摴㰾琯㹤琼㹤⼼摴㰾摴㰾琯㹤琼㹤㰰琯㹤琼㹤⼼摴㰾摴㰾琯㹤琼㹤⼼摴㰾摴 - )\"

Просьба скопировать этот текст (взял из лога Терминала) в ME, переместить курсор в конце строки и попробовать удалять символы через BackSpace-клавишу. У меня воспроизводимый баг.

На анимации обратите внимание на положение курсора. Жму BackSpace, а удаляются символы, которые далеко от курсора находятся.


ЗЫ В Notepad все отлично, в ME - нет.

Строка для поиска: Uluchshenie 012.
 
fxsaber:

Просьба скопировать этот текст (взял из лога Терминала) в ME, переместить курсор в конце строки и попробовать удалять символы через BackSpace-клавишу. У меня воспроизводимый баг.


ЗЫ В Notepad все отлично, в ME - нет.

в МЕ Win10-64 без проблем удалилось

вроде все скопировал, последние символы у меня:

摴 - )\"

ЗЫ: там в МЕ есть какой то прикол, у меня файлы исходников .mql4/mql5 по 50 Кб, на форумах этот же код будет у юзеров занимать 5-6 кБ, кажется фокус в кодировке Юникод- "не Юникод" - не помню уже, где то обсуждали


UPD: меню МЕ : файл - сохранить как - внизу кодировка , у меня по умолчанию Юникод

 
Igor Makanu:

UPD: меню МЕ : файл - сохранить как - внизу кодировка , у меня по умолчанию Юникод

Аналогично.

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

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

fxsaber, 2020.03.01 16:10

На анимации обратите внимание на положение курсора. Жму BackSpace, а удаляются символы, которые далеко от курсора находятся.

 
fxsaber:

Просьба скопировать этот текст (взял из лога Терминала) в ME, переместить курсор в конце строки и попробовать удалять символы через BackSpace-клавишу. У меня воспроизводимый баг.

На анимации обратите внимание на положение курсора. Жму BackSpace, а удаляются символы, которые далеко от курсора находятся.


ЗЫ В Notepad все отлично, в ME - нет.

Строка для поиска: Uluchshenie 012.

Недавно был такой же баг. Только у меня еще и курсор пропал. Перезапустил МЕ , больше не повторялось. Думал что-то с виндой 
 
Vladislav Andruschenko:
Перезапустил МЕ , больше не повторялось.

Перезагрузка не помогает.