fatal compiler error: code generation failed - Seite 2

 

Problem eingekreist. Folgende Zeile in dataanalysis.mqh ist falsch. Keine Ahnung warum:


MQL-ALIGLIB-BUG

 

Schau auf den Anfang dieser Funktion:

//+------------------------------------------------------------------+
//| The purpose of mcsrch is to find a step which satisfies a        |
//| sufficient decrease condition and a curvature condition.         |
...
//| s is an input array of length n which specifies the search       |
//| direction.                                                       |
...
//| wa is a work array of length n.                                  |
//+------------------------------------------------------------------+
void CLogit::MNLMCSrch(const int n,CRowDouble &x,double &f,CRowDouble &g,
                       CRowDouble &s,double &stp,int &info,int &nfev,
                       CRowDouble &wa,CLogitMCState &state,int &stage)
  {

Da ist jetzt:   x=wa+s*stp+0;
nicht wirklich eine Array-Schreibweise.

In ...\Include\Math\Alglib\matrix.mqh (!!)

CRowDouble 

ist deklariert als:

//+------------------------------------------------------------------+
//| Rows (double)                                                    |
//+------------------------------------------------------------------+
class CRowDouble
  {
private:
   vector<double>    m_array;

public:
   //--- constructors @ destructor
                     CRowDouble(void)                            {}
                     CRowDouble(const vector<double> &vect)      { m_array=vect; }
                     CRowDouble(const double &vect[])            { this=vect; }
                     CRowDouble(const CRowDouble &vect)          { this=vect; }
                    ~CRowDouble(void)                            {}

   //--- methods
   int               Size(void) const                            { return((int)m_array.Size()); }
   bool              Resize(const ulong n)                       { return(m_array.Resize(n)); }

.....

Gibt es jetzt mit x=wa+s*stp+0; eine neue Grammatik in MQL5 oder ist mir da etwas entgangen?

PS: Wo ist das Farbenspiel der Codezeilen? Man ist wohl heftig am umbauen.
 

In der o.a. matrix-Datei gibt es noch mehr Überraschungen:

   vector<double>    Pow(const double p) const                   { return(MathPow(m_array,p)); }
   vector<double>    Sqrt(void)                                  { return(MathSqrt(m_array)); }

Mir ist nicht bekannt, dass die integrierten Funktionen Vektoren akzeptieren - ich probier's mal aus, man soll ja nie aufhören zu lernen:

//+------------------------------------------------------------------+
//|                                         test_Matrix_Pow&Sqrt.mq5 |
//|                                                            Calli |
//|                              https://www.mql5.com/de/users/gooly |
//+------------------------------------------------------------------+
#property copyright "Calli"
#property link      "https://www.mql5.com/de/users/gooly"
#property version   "1.00"
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
#include <\\Math\\Alglib\\matrix.mqh> 
void OnStart()
  {
//---
   vector x = {4,9,16,25};
   CRowDouble cr(x);
   Print(cr.Sqrt());
   Print(cr.Pow(2));
   //Print(cr.Sort()); // <= 'Sort' - undeclared identifier	test_Matrix_Pow&Sqrt.mq5	20	1

   
/* prints:

        [2,3,4,5]
        [16,81,256,625]

*/   
  }
//+------------------------------------------------------------------+

Also das .Pow(n) und .Sqrt() ist noch nicht in der Referenz, hingegen zB.: .Sort schon aber noch nicht kodiert.

Wie heißt es so schön Work in Progress :)

Dokumentation zu MQL5: Matrizen und Vektoren / Manipulation
Dokumentation zu MQL5: Matrizen und Vektoren / Manipulation
  • www.mql5.com
Manipulation - Matrizen und Vektoren - Nachschlagewerk MQL5 - Nachschlagewerk über die Sprache des algothitmischen/automatischen Handels für MetaTrader 5
Dateien:
 

Ich denke, das Problem ist die Operator-Überladung in matrix.mqh.

Wenn man 

x = wa + s;

anstatt

x = wa + s * stp;

ersetzt, bekommt man entsprechende Fehlermeldungen.

Blöde Frage. Sollt der Rückgabewert eines Operators nicht die Klasse selbst sein ?

 

vector<double>    operator*(const double value) const         { return(m_array*value); }
   

 Eher so, oder ?

CRowDouble   operator*(const double value) const ;
 

Und hier ein kompilierfähiger Schwindel:

...
vector<double> x1;
..
x1 = wa.ToVector() + stp * s.ToVector();
x = x1;