Einzelne Elemente in einem struct-Array ansprechen

 

Moin allerseits,

wie kann ich einzelne Elemente in einem struct-Array ansprechen?

Beispielcode:

struct xtrm 
   {
   int richtung;
   int start;
   int ende;
   };

xtrm xtrm_arr[5]; // statisches Array mit 5 Elementen

xtrm_arr[0].richtung = 2;
xtrm_arr[0].start = 111;
xtrm_arr[0].ende = 222;

Warum funktioniert der Beispielcode nicht?

Der Compiler bemängelt dann u.a. die Zuweisung der einzelnen Werte mit

'xtrm_arr' - unexpected token, probably type is missing?

Da stehe ich gerade auf dem Schlauch.

Hat jemand einen Tip?

 

MT4 oder MT5?

Weil in MT5 sollte es funktionieren.

Probier mal ein nicht statisches Array mit:

xtrm xtrm_arr[];
ArrayResize(xtrm_arr,5);
...
 
in MT5
 
Vielleicht fehlt auch nur vor xtrm_arr[0].richtung = 2; eine Klammer oder ; oder ...?
 
Hatte ich schon durchexerziert. Funktioniert auch nicht.
 

Ich hatte es direkt aus dem Editor hierherkopiert.

Nochmal mit Zeilennummern:

790:    struct Xtrm
791:      {
792:      int richtung; // 1 = lo, 2 = hi
793:      int start; // Index im Array
794:      int ende;
795:      Xtrm()
796:         {
797:         richtung = 0;
798:         start = 0;
799:         ende = 0;
800:         }
801:      };
802:
803:    Xtrm xtrm_arr[5];
804:
805:    xtrm_arr[1].richtung = 2;
806:    xtrm_arr[1].start = 111;
807:    xtrm_arr[1].ende = 222;

Die Compilerfehler:

Beschreibung                                                       Zeile/Spalte
--------------------------------------------------------------------------------
'xtrm_arr' - unexpected token, probably type is missing?           805     1
'.' - semicolon expected                                           805     12
'xtrm_arr' - unexpected token, probably type is missing?           806     1
'.' - semicolon expected                                           806     12
'xtrm_arr' - unexpected token, probably type is missing?           807     1
'.' - semicolon expected                                           807     12

 

Der Fehler lässt sich leicht reproduzieren, indem man o.g. Code in eine leere Datei im Metaeditor einfügt.


Der Compiler stört sich am Datentyp des Arrays, der Struktur. Die ist jedoch ab Zeile 790 sauber definiert. Fehlende Kommata etc. kann ich nicht entdecken.

 
Zeile 800? Wo ist der Rest Deines Programms? Klar wenn ich das in eine leere Datei im Editor eingebe wird es ja nicht richtig kompiliert.

Es ist nicht möglich aus den paar Zeilen abzulesen, wo es wirklich hängt.

 Da kommen nur Vermutungen raus.
 

Hallo,

der Rest des Programmes ist hier nicht nötig.

Die oben abgebildeten Zeilen ergeben bereits lauffähigen Code, bzw. sollten diesen ergeben, wenn der Compiler keinen Fehler melden würde.

 
Ich nehm mal an, die zeilen ab 805 dürfen nicht in public space stehen
 

Gelöst!

Hi amando,

Dein Hinweis war ein Treffer. Die Vereinbarung des Arrays etc. sollte nicht mehr im global space erfolgen, sondern in einem Event.


Korrigiert sollte das dann so aussehen:

// global space
struct xtrm 
   {
   int richtung;
   int start;
   int ende;
   };

int OnInit()
        {
        [...]
        xtrm xtrm_arr[5]; // statisches Array mit 5 Elementen

        xtrm_arr[0].richtung = 2;
        xtrm_arr[0].start = 111;
        xtrm_arr[0].ende = 222;
        }


Vielen Dank für Eure Antworten.

Grund der Beschwerde: