Übergabe eines struct arrays an eine Funktion

 
Hallo.

Ich benötige eine Funktion welche flexiebel ein strukturiertes array als parameter erhält. Diese übergebene Struktur soll  jedoch unterschiedlich sein, damit ich die Funktion für verschiedene arrays nutzen kann.

Beispiel
//Aray1
struct my_struct                                      
{  
   int      field;     
   int      field2;     
}
my_struct my_array[];   


//Aray2
struct my_struct2                                      
{  
   int      anotherfield1;     
   double   anotherfield2;     
   string   anotherfield3;     
}
my_struct2 my_array2[];   



//Flexible Funktion
int my_array_function(parameter_array){
        //tu was
        return 0;       
}


//Aufruf der Funktion 
my_array_function(my_array);
//oder
my_array_function(my_array2);
Der Aufruf der Funktion führt zur Fehlermeldung "parameter conversion not allowed"

Was mache ich falsch oder geht das so gar nicht und wenn es nicht geht gäbe einen alternativen Weg zum Ziel zu kommen?

Danke euch!
Dokumentation zu MQL5: Konstanten, Enumerationen und Strukturen / Kodes der Fehler und Warnungen / Kompilierungsfehler
Dokumentation zu MQL5: Konstanten, Enumerationen und Strukturen / Kodes der Fehler und Warnungen / Kompilierungsfehler
  • www.mql5.com
Kompilierungsfehler - Kodes der Fehler und Warnungen - Konstanten, Enumerationen und Strukturen - Nachschlagewerk MQL5 - Nachschlagewerk über die Sprache des algothitmischen/automatischen Handels für MetaTrader 5
 
ReLor:
Hallo.

Ich benötige eine Funktion welche flexiebel ein strukturiertes array als parameter erhält. Diese übergebene Struktur soll  jedoch unterschiedlich sein, damit ich die Funktion für verschiedene arrays nutzen kann.

Der Aufruf der Funktion führt zur Fehlermeldung "parameter conversion not allowed"

Was mache ich falsch oder geht das so gar nicht und wenn es nicht geht gäbe einen alternativen Weg zum Ziel zu kommen?

Danke euch!
Wie die Fehlermeldung "parameter conversion not allowed" sagt geht es nicht. Du könntest höchsten eine Struktur definieren, die beide umfasst und dann ein Funktion für den einen und eine für den anderen Teil.
 
schade, das bläht den Code dann unnötig auf aber wenn es nicht geht, sind das halt die Grenzen in denen man die Dinge wohl akzeptieren muss.

Wenn ich das auf eine Strukturbegrenze erhalte ich aber dennoch den gleichen Fehler.

//Aray2
struct my_struct2                                      
{  
   int      anotherfield1;     
   double   anotherfield2;     
   string   anotherfield3;     
}
my_struct2 my_array2[];   



//Flexible Funktion
int my_array_function(my_array2){
        //tu was
        return 0;       
}
Mache ich da sonst noch was falsch?

Wenn ich es so versuche
//Aray2
struct my_struct2                                      
{  
   int      anotherfield1;     
   double   anotherfield2;     
   string   anotherfield3;     
}
my_struct2 my_array2[];   



//Flexible Funktion
int my_array_function(my_struct2 my_array2[]){
        //tu was
        return 0;       
}
erhalte ich den Fehler "'my_struct2' - objects are passed by reference only"

Wenn ich es wieder ohne "my_struct2" versuche erhalten ich wieder "parameter conversion not allowed"


Was mache ich falsch?
 
Hab glaub ich gerade des Rätsels Lösung gefunden.

int my_array_function(my_struct2 & my_array2[]){
        //tu was
        return 0;       
}
 
ReLor #:
Hab glaub ich gerade des Rätsels Lösung gefunden.

Naja, das sind Grundlagen. Nur einfache Datentypen können direkt übrgeben werden, andere wie Arrays Klassen, .. nur als Referenz.
 
Die Übergabe eines "undefinierten" Objekts geht mit Pointer und Vererbung.

Du kannst eine Pointer-Variable einer Basisklasse als Parameter der Funktion nutzen.

Dann übergibst du einen Pointer auf ein abgeleitetes Objekt an die Funktion.

Polymorphie übernimmt dann die Auflösung der Objekte nach ihren tatsächlichen Typen zur Laufzeit.

So geht das dann sehr wohl. Zumindest so weit mir bekannt.