Fehler, Irrtümer, Fragen - Seite 2662

 

Ich habe einen schwierigen Fall - es gibt keine Logik für mich.

Es gibt eine Funktion mit diesen Eingaben

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; }

Diese Funktion gibt also manchmal einen Wert von 769 aus

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

Wenn Sie den ersten Ausdruck auskommentieren

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

dann wird der richtige Wert angezeigt.

Wenn Sie die Funktion kürzen, indem Sie nur den Code entfernen, der zum Zeitpunkt des Funktionsaufrufs im Moment des Fehlers nicht aktiviert ist, tritt auch kein Fehler auf.

Offensichtlich ein Compiler-Fehler - Entwickler, die die vollständige Funktion zu senden, weil es nicht auf dem Forum passen.

 
Das Forum verzerrt die Formatierung des Codes, eine Korrektur ist nicht möglich.
 
Es stellt sich heraus, dass das Hinzufügen von Klammern eine wundersame Wirkung auf die Lösung der oben beschriebenen Probleme hat:

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:
Es stellt sich heraus, dass das Hinzufügen von Klammern eine wundersame Wirkung auf die Lösung der oben beschriebenen Probleme hat:

Das ist die einzige Möglichkeit, zu schreiben.

 
MT5-Bug (Build 2345) Kompilierungsfehler für den Rückgabewert einer Template-Funktion, wenn der Rückgabewert eine interne Klasse innerhalb einer Template-Klasse ist, deren Parametertyp durch den Argumenttyp der Template-Funktion gegeben ist:

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 (琼㹤⸱㠰㐹㰷琯㹤琼㹤⼼摴㰾摴ㄾ〮ㄹ㔷⼼摴㰾摴㈾㄰⸹㠰ㄮ‴㈰〺㨰〰ㄮ㐱⼼摴㰾摴ㄾ〮〹㐵⼼摴㰾摴㰾琯㹤琼㹤⼼摴㰾摴㰾琯㹤琼㹤㰰琯㹤琼㹤⼼摴㰾摴㰾琯㹤琼㹤⼼摴㰾摴 - )\"

Bitte kopieren Sie diesen Text (aus dem Terminalprotokoll) in ME, bewegen Sie den Cursor an das Ende der Zeile und versuchen Sie, die Zeichen mit der BackSpace-Taste zu löschen. Ich habe einen reproduzierbaren Fehler.

Notieren Sie in der Animation die Position des Cursors. Wenn ich BackSpace drücke, werden Zeichen gelöscht, die weit vom Cursor entfernt sind.


ZZY In Notepad ist alles in Ordnung, in ME nicht.

Suchbegriff: Uluchshenie 012.
 
fxsaber:

Bitte kopieren Sie diesen Text (aus dem Terminalprotokoll) in ME, bewegen Sie den Cursor an das Ende der Zeile und versuchen Sie, die Zeichen mit der BackSpace-Taste zu löschen. Ich habe einen reproduzierbaren Fehler.


ZY ist alles in Notepad in Ordnung, nicht in ME.

In ME Win10-64 kein Problem gelöscht

Ich glaube, ich habe alles kopiert, ich habe die letzten Zeichen:

摴 - )\"

ZY: es gibt einen Trick in ME, ich habe eine Quelldatei .mql4/mql5 von 50KB, auf den Foren der gleiche Code wird die Benutzer 5-6 kB, ich denke, der Trick ist in der Codierung Unicode-"nicht Unicode" - ich erinnere mich nicht, wo jemand diskutiert


UPD: ME-Menü: Datei - Speichern unter - unten bei der Kodierung ist Unicode voreingestellt

 
Igor Makanu:

UPD: ME-Menü: Datei - Speichern unter - untere Kodierung, mein Standard ist Unicode

Dasselbe gilt für den unteren Teil.

Forum zum Thema Handel, automatisierte Handelssysteme und Strategietests

Wanzen, Wanzen, Fragen

fxsaber, 2020.03.01 16:10

Ich versuche, eine Animation zu öffnen und auf die Position des Cursors zu achten. Ich drücke BackSpace und lösche Zeichen, die weit vom Cursor entfernt sind.

 
fxsaber:

Bitte kopieren Sie diesen Text (aus dem Terminalprotokoll) in ME, bewegen Sie den Cursor an das Ende der Zeile und versuchen Sie, die Zeichen mit der BackSpace-Taste zu löschen. Ich habe einen reproduzierbaren Fehler.

Achten Sie in der Animation auf die Position des Cursors. Wenn ich BackSpace drücke, werden Zeichen gelöscht, die weit vom Cursor entfernt sind.


ZY In Notepad ist es in Ordnung, in ME nicht.

Suchbegriff: Uluchshenie 012.

Ich hatte kürzlich den gleichen Fehler. Nur habe ich auch den Cursor verloren. Ich habe ME neu gestartet, das Problem trat nicht mehr auf. Ich dachte, mit dem Windows stimmt etwas nicht.
 
Vladislav Andruschenko:
Ich habe ME neu gestartet und es ist nie wieder passiert.

Ein Neustart hilft nicht.