Compilerfehler: Zu viele Initialisierungen!!!



  • Hallo,
    ich habe ein Array:

    const char chars[] =   {"A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L",
    							"M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X",
    							"Y", "Z", "0", "1", "2", "3", "4", "5", "6", "7", "8", "9",
    							"\196", "\214", "\220", "\223", "?", ".", "(", ")", "=", "\0"};
    

    Mein Compiler melden folgenden Fehler:
    Zu viele Initialisierungen

    Wenn ich aber das Array auf std::string umstelle:

    const std::string chars[] =   {"A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L",
    							"M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X",
    							"Y", "Z", "0", "1", "2", "3", "4", "5", "6", "7", "8", "9",
    							"\196", "\214", "\220", "\223", "?", ".", "(", ")", "=", "\0"};
    

    funktionierts...

    Könntet ihr mir erklären warum?

    Danke im voraus.

    Gruß Speedy_92



  • const char* chars =   {'A', 'B', [...]};
    

  • Mod

    Ein char-Array kannst du entweder durch Aufzählung von Zeichenliteralen (begrenzt durch: ' ) initialisieren oder durch ein einzelnes Stringliteral (begrenzt durch: " - die geschweiften Klammern dürfen dann entfallen). Da deine Literale Stringliterale sind, sind alle bis auf das erste überzählig.

    const char chars[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789\196\214\220\223?.()=";
    


  • statt " musst du ' benutzen

    const char chars[] =   {'A', 'B', ...
    


  • Vielen Dank.
    Hatte vollkommen vergessen das chars ja mit ' eingeschlossen werden 😃

    Aber eine Frage: Wieso muss ich einen Pointer benutzen???



  • du musst nicht... kannst aber:

    aus:

    const char chars[] =   {'A', 'B', ...
    

    mach:

    const char *chars =   "ABCDEFGH...";
    

    letzteres hat de vorteil dass du nicht so viel schreibarbeit mit den vielen ' hast
    und dass du trtzdem wie gewohnt auf chars[i] zugreifen kannst,
    da *(chars + i) = chars[i] entspricht.



  • Quellcode schrieb:

    du musst nicht... kannst aber:

    aus:

    const char chars[] =   {'A', 'B', ...
    

    mach:

    const char *chars =   "ABCDEFGH...";
    

    letzteres hat de vorteil dass du nicht so viel schreibarbeit mit den vielen ' hast
    und dass du trtzdem wie gewohnt auf chars[i] zugreifen kannst,
    da *(chars + i) = chars[i] entspricht.

    Er kann genausogut ein Array machen

    const char *a = "ABCDEFGH...";
    const char b[] = "ABCDEFGH..."; // geht genauso
    

    In beiden Fällen wird ein '\0' angehängt. sizeof(a) ist allerdings sizeof(char*), sizeof(b) wird dagegen (strlen(a) + 1) sein.



  • ja verzeihung...
    wollte mich nicht gleich als char* fan outen...
    konnte ja kann keiner ahnen, dass du der radikalen char[]-Partei angehörst



  • Quellcode schrieb:

    ja verzeihung...
    wollte mich nicht gleich als char* fan outen...
    konnte ja kann keiner ahnen, dass du der radikalen char[]-Partei angehörst

    Den Streit hat man mit std::string nicht 😉



  • stimmt 😉


Anmelden zum Antworten