expected unqualified id before numeric constant



  • Hallo zusammen 🙂

    ich hab ein Problem mit einer Fehlermeldung in einem super kurzen Code. Ich bin doppelt verwirrt weil das Programm bereits ohne Fehlermeldung korrekt lief und ich danach nichts mehr verändert habe.
    Der Code ist Folgender:

    #include <iostream>
    using namespace std;

    //erstelle 1d array

    int * get_1_arr()
    {
    int static 1_arr[3]={1,2,3}; // error: expected unqualified-id before numeric constant
    return 1_arr; // error: unable to find numeric literal operator 'operator""_arr'
    }

    int main()
    {
    //Ausgabe für 1d array:

    int * 1_arr = get_1_arr();        // error: expected unqualified-id before numeric constant
    for (int i=0; i< 3; i++)
    {
        cout << 1_arr[i] << endl;     // error: unable to find numeric literal operator 'operator""_arr'
    }
    

    return 0;
    }

    Die Fehlermeldungen stehen in der jeweiligen Zeile.

    Ich hoffe ihr könnt mir weiterhelfen.
    Danke im Voraus!

    LG Smilee



  • Identifier dürfen nicht mit Zahlen beginnen.


  • Mod

    Bezeichner in C++ müssen dürfen nicht mit einer Ziffer beginnen.

    Deine Idee hier mit der Rückgabe eines statischen Arras ist grauenhaft falsch, auf jede erdenkliche Weise. Aber anstatt zu erklären, wie C-Arrays korrekt funktionieren, verweise ich lieber auf std::array bzw. std::vector, die C++-Äquivalente eines Arrays, die tatsächlich so funktionieren, wie man es von anderen Variablentypen erwartet.



  • @Mechanics bist ein schatz!!
    danke dir.



  • @SeppJ ok...was genau an der idee ist denn "grauenhaft falsch"? lerne gerne dazu 🙂
    werde mir std::array und std::vector natürlich trz mal anschauen, aber vllt magst du ja trz ein zwei worte mehr darüber verlieren, was ich verbessern könnte.



  • @Smilee_N19 sagte in expected unqualified id before numeric constant:

    @SeppJ ok...was genau an der idee ist denn "grauenhaft falsch"? lerne gerne dazu 🙂
    werde mir std::array und std::vector natürlich trz mal anschauen, aber vllt magst du ja trz ein zwei worte mehr darüber verlieren, was ich verbessern könnte.

    Zum Beispiel: woher weißt du in deiner for-Schleife, dass die Abbruchbedingung "i < 3" lautet? Du weißt das nur, weil du das Array oben 3 Felder groß gemacht hast. Nimm an, dass du mehrere solcher Funktionen hast. Also

    int * get_A_arr() {
        int static arr_a[3]={1,2,3};
        return arr_a;
    }
    int * get_B_arr() {
        int static arr_b[4]={1,2,3,4};
        return arr_b;
    }
    ...
    int main(int argc, char **) {
        int *arr = argc > 1 ? get_B_arr() : get_A_arr();   
        for (size_t i = 0; i < ????; ++i) { // <---- HIER
            std::cout << arr[i] << '\n';
        }
    }
    

    Wie bringst du dieses Programm korrekt zum Laufen? Was setzt du bei "????" ein?

    Und dann verstehe ich den Nutzen einer Funktion in diesem Fall nicht. Im Prinzip ist es hier auch nichts anderes als ein globales Array. Gibt es irgendeine Begründung für diese Funktion? Also z.B. wenn sie jedes Mal ein neues Array liefern würde (was sie ja nicht tut). Aber so gibt sie doch nur immer einen (non-const) Pointer auf dieses globale Array zurück. D.h. jeder kann das Array ändern. Und zurück zu 1: niemand weiß, wie groß das Array ist.



  • @wob achsooo...ursprünglich gibt es um die ausgabe 2dim arrays. mir ist schon klar, dass der code oben nicht allg anwendbar ist. mir ging es nur darum ob ich tatsächlich einen logischen fehler gemacht hab oder einfach nen syntaxfehler. deshalb hab ich mir ein minibsp geschrieben und war entsprechend verwirrt, weil es am anfang ging und dann net mehr. hab aber wohl doch noch was geändert, denn vorher wurde es ja compiliert 🙂



  • @wob aber manchmal denkt man eben zu kompliziert...und übersieht die einfacheren dinge



  • @Smilee_N19 sagte in expected unqualified id before numeric constant:

    ursprünglich gibt es um die ausgabe 2dim arrays

    Diese implementiert man am besten als 1d-Array und speichert Breite/Höhe zusätzlich. Man muss beim Zugriff dann nur den Index korrekt berechnen. Da gibt es hier im Forum ultra-ausführliche Threads zu.



  • @wob Ach, überforder' doch nicht einen der es nichtmal fertigbringt Code in einem Forum leserlich zu posten.



  • @Swordfish auf Sarkasmus kann ich gut verzichten. behalt deine destruktiven kommentare für dich. so etwasist absolut unnötig, hilft niemandem und verbreitet nur schlechte laune!



  • @Smilee_N19 Manchmal sollte man den Schwertfisch einfach ignorieren 😉

    Was ich dir empfehle: Nimm dir den Beitrag von @SeppJ sehr zu Herzen. Das was du da programmiert hast, ist im Grunde der Stil von vor 20 Jahren. Lies dir Wissen zu den aktuellen Containern ( z.b. Arrays, Vectoren ) von C++ an und verwende diese konsequent. Es gibt praktisch keinen Grund mehr, die nicht zu verwenden, denn die:

    • reduzieren deine Fehlerquote durch konsequenten Verzicht auf Pointer-Gewurschtel ( bei dir "int*" )
    • machen den Quellcode leichter verständlich
    • sind bei korrekter Anwendung performanter als alles was Anfänger sich meist selber so zusammenbauen