Komplexe Array-Struktur initialisieren

Gast #2752180
Lesenswert?

Hallo,

ich möchte ein Array aus structs definieren in denen verschiedene 
Variablentypen enthalten sind. Das ganze sieht wie folgt aus:
1
typedef struct {
2
    int      function;
3
    char*      nameFunction;
4
    enum types typeParameter[NUMBER_WORDS_MAXIMAL - 1];
5
    } structPrototype;
6

7
structPrototype prototype[][NUMBER_WORDS_MAXIMAL] = { ( add_int_a_b(izahl1, izahl2), "add", { INT, INT, NONE, NONE, NONE, NONE, NONE, NONE, NONE } ), 
8
                                                           ( sub_int_a_b(izahl1, izahl2), "sub", { INT, INT, NONE, NONE, NONE, NONE, NONE, NONE, NONE }; ),
9
                                                           ( mul_int_a_b(izahl1, izahl2), "mul", { INT, INT, NONE, NONE, NONE, NONE, NONE, NONE, NONE }; ) };

Ich bekomme jedoch ständig die Fehlermeldung, in den Zeilen der 
Initialisierung wo es heißt "expected an expression". Hab schon die 
ganze Zeit rumprobiert ich komm aber nicht dahinter wie ich das richtig 
initialisieren kann vor allem wenn ich einen enum-type verwenden möchte.
Gast #2752309
Lesenswert?

Dein Code scheint fälschlicherweise normale statt geschweifte Klammern 
zu enthalten. Prüf die alle mal. Im Initialisierer müssen structs (also 
die einzelnen Array-Elemente) in geschweiften Klammern stehen.

Weitere mögliche Fehlerquellen: Manche Compiler mögen gar keine 
Struct-Array-Initialisierer, und manche Compiler verlangen Konstanten, 
Funktionsaufrufe sind da nicht möglich.
Gast #2752317
Lesenswert?

Ich nehme an, das soll eine Art Taschenrechner werden.
Allerdings habe ich das Gefühl, dass hier ein paar Fehler im Bezug auf 
die Struktur gemacht worden sind.

-Warum ist das Array mehrdimensional, wenn es nur eindimensional befüllt 
wird ?
-Sollte das Struct-Member function nicht lieber ein Funktionspointer 
sein ? So wie ich das sehe, wird hier eine Callback-Funktion vorbereitet 
( daher wohl auch die Parameter-Typenliste )

Die Runden Klammern in der Initialisierung kommen mir etwas komisch vor. 
Bei GCC zumindest initialisierte man einen Struct array mit geschweiften 
Klammern, also
1
pseudoStruct meinArray[2] = { { member1, member 2 }, { member 1, member 2} };
Gast #2752340
Lesenswert?

Danke Leute, die eine Dimension zuviel hat gestört und die runden 
Klammern waren unnötig. So gehts:
1
structPrototype prototype[] = { { add_int_a_b(izahl1, izahl2), "add", { INT, INT, NONE, NONE, NONE, NONE, NONE, NONE, NONE } }, 
2
                                { sub_int_a_b(izahl1, izahl2), "sub", { INT, INT, NONE, NONE, NONE, NONE, NONE, NONE, NONE } },
3
                                { mul_int_a_b(izahl1, izahl2), "mul", { INT, INT, NONE, NONE, NONE, NONE, NONE, NONE, NONE } } };
Persönliche Seite #2752906
Lesenswert?

Du willst wahrscheinlich sowas wie:
1
extern int add_int_a_b (int, int);
2
extern int sub_int_a_b (int, int);
3
extern int mul_int_a_b (int, int);
4

5
typedef struct
6
{
7
    int (*function)(int,int);
8
    const char* nameFunction;
9
    enum types typeParameter[NUMBER_WORDS_MAXIMAL - 1];
10
} structPrototype;
11

12
structPrototype prototype[][NUMBER_WORDS_MAXIMAL] =
13
{
14
    { add_int_a_b, "add", { INT, INT, NONE, NONE, NONE, NONE, NONE, NONE, NONE }}, 
15
    { sub_int_a_b, "sub", { INT, INT, NONE, NONE, NONE, NONE, NONE, NONE, NONE }},
16
    { mul_int_a_b, "mul", { INT, INT, NONE, NONE, NONE, NONE, NONE, NONE, NONE }}
17
};

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren