Wo ist hier der Fehler? [error: expected primary-expression before '[' token|]



  • Wäre ganz nett, weil ich nicht verstehe, worauf Du hinauswillst 😉

    Ich hatte den Link schon gelesen. Und im Nachhinein hätte ich wohl bloß die Funktion zeigen sollen. Nur war ich mir bis dahin noch gar nicht bewusst, in welche Richtung der Fehler liegt. Deswegen hatte ich oben geschrieben, ich zeige lieber den gesamtem Code (der natürlich selbst aus einem größeren Zusammenhang kommt).



  • 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*)'
    

  • Mod

    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 nur Charakter , falls das wirklich C++ und kein C sein soll) und der Name des Parameters palette sein soll. Also

    void 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 Typ struct 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 😉


Anmelden zum Antworten