Wo ist hier der Fehler? [error: expected primary-expression before '[' token|]
-
Der Fehler liegt in der Deklaration von
showColors()
, was soll denn der dritte Parameter sein? Und wie heißt er?
-
Ach danke, jetzt bin ich dahinter gekommen Der struct musste noch in der Funktion definiert/deklariert werden.
Das hatte ich eigentlich mal beherrscht, aber schon nach drei/vier Jahren ist vieles verloren gegangen
-
lemon03 schrieb:
Das hatte ich eigentlich mal beherrscht, aber schon nach drei/vier Jahren ist vieles verloren gegangen
Und weil das so ist, gleich ähnlich gelagerte Frage: Wie rufe ich die Funktion auf?
showColors_1(set, cha_number, palette);
gibt Schwierigkeiten mit
cannot convert 'Charakter*' to 'palette*' for argument '3' to 'void showColors_1(HANDLE, int, palette*)'
-
lemon03 schrieb:
Ach danke, jetzt bin ich dahinter gekommen Der struct musste noch in der Funktion definiert/deklariert werden.
Ich glaube, du hast das falsch verstanden.
struct palette[]
ist, so wie du das schreibst, ein Datentyp.palette
ist kein Bezeichner für eine Variable.Aus dem Zusammenhang nehme ich mal stark an, dass der Datentyp hier
struct Charakter
sein soll (oder einfach nurCharakter
, falls das wirklich C++ und kein C sein soll) und der Name des Parameterspalette
sein soll. Alsovoid showColors_1(HANDLE set, int cha_number, struct Charakter palette[])
Das löst dann auch dein Folgeproblem, denn du versuchst einen Zeiger vom Typ
struct Charakter*
an die Funktion zu übergeben. Falls du aber stattdessen einen Parameter vom Typstruct palette*
erwartest, passt das logischerweise nicht.
-
Hachajeh, danke :), auch für die Erklärung
-
Ich merke, das ich scheinbar noch grundsätzlich mehr Schwierigkeiten mit Strukturen habe. Kann sein, das ich mich noch mal melden muss
-
Hallo,
tja, ich bin wieder an einer Stelle angelangt, wo ich nicht weiter weiß.
Wieso wird mir palette[] nicht korrekt zurück gegeben?
struct Character { int form; int col; }; Character makePalette(std::vector <int> &char_form, std::vector <int> &char_col) { char_form = {lGrey, mGrey, dGrey, Block, dGrey, mGrey, lGrey}; char_col = {4,6,14,10,2,11,3,9,1,5,13,12}; int cha_number = char_form.size() * char_col.size(); Character palette[cha_number]; int counter = 0; for (int j=0; j<char_col.size(); j++) { for (int i=0; i<char_form.size(); i++) { palette[counter].form = char_form.at(i); palette[counter].col = char_col.at(j); counter ++; } } return palette[cha_number]; } std::vector <int> char_form; std::vector <int> char_col; Character palette = makePalette(char_form, char_col); std::cout << palette[13].col << " " << palette[13].form << std::endl; //fehler
fehler:
error: no match for 'operator[]' in 'palette[13]'
-
Weil du nur ein Character zurückgibst und kein Array von Characters. Wenn du wirklich das ganze Array zurückgeben willst wäre das ein Fall für std::vector, den du ja scheinbar kennst. Eigentlich dürfte die Zeile
Character palette[cha_number];
auch gar nicht compilieren. Variable length Arrays sind ein Feature aus C und gibt es in C++ eigentlich nicht. Auch ein Fall für vector.
-
Ok, dann werde ich das mal versuchen
-
Danke
Hätte ich das gleich mal versucht, hätte ich mir viele Stunden Fummelei und Frust sparen können