Array in einer while Schleife
-
@Dpascalm sagte in Array in einer while Schleife:
Wieso was sind an Array schlecht dran?
Offensichtlich funktioniert der Code doch nicht. Ist das schlecht genug? Für konstante Grö0en kannst du so ein Array zwar nehmen, aber in C++ gibt es da auch
std::array
für. Dann kannst du z.B. auch gleich mit.size
die Länge bekommen.Für genau diesen Zweck (Speicheranforderung von einer Anzahl Elementen, die erst zur Laufzeit bekannt ist) gibt es
std::vector
. Siehe https://en.cppreference.com/w/cpp/container/vector - schau dir da am besten gleich mal das Beispiel an. Wenn das Buch dir was anderes beibringt, das noch nicht einmal kompiliert, ist es offenbar schlecht.
-
@Dpascalm
Was du benutzt sind VLA (variable length array).
Die sind gemäß C++ Standard verboten, aber (leider) Bestandteil vom C99 Standard. (eine der wenigen Sachen, die in C++ konsequenter gehandhabt werden als in C). Als nicht-standardkonforme Extension erlauben das manche Compiler, probier mal "-pedantic-errors" als Compiler-Option.
Werfe dein C++ Buch weg und beschwere dich bei Autor. Der hat keine Ahnung.
Und benutzte - wenn du wirklich weißt, dass du C++ und nicht C Code schreiben willst - vector.
vector ist in C++ geschaffen worden für Leute, die keine Ahnung von C haben aber trotzdem behaupten wollen, sie könnten programmieren.
-
Warum stellst du diese Frage in Forentechnik?
Zum Thema: Doppelt schlimm. Selbst in C wäre die Angabe von VLA-Größen durch Benutzer hochriskant und nicht der Anwendungsfall, für den VLAs vorgesehen sind. Der Autor kann also auch kein C, sondern hat wahrscheinlich einfach nur rumprobiert bis bei ihm Zuhause sein Beispiel zufällig funktioniert hat, ohne es selber zu verstehen. Schöner Experte.
-
@wob sagte in Array in einer while Schleife:
Wenn das Buch dir was anderes beibringt, das noch nicht einmal kompiliert, ist es offenbar schlecht.
Oder hoffnungslos veraltet. Ich tippe mal dass das Buch bzw. die Stelle vor C++11 entstanden ist. Damals gab es noch kein std::array.
Und genau das könnte die Ursache für den Fehler sein. Der Compiler möchte hier ein std::array instanziieren.
@Dpascalm
Schau dir mal die Doku zu std::vector an
-
@Quiche-Lorraine sagte in Array in einer while Schleife:
Der Compiler möchte hier ein std::array instanziieren.
WTF?
-
@Quiche-Lorraine sagte in Array in einer while Schleife:
@wob sagte in Array in einer while Schleife:
Wenn das Buch dir was anderes beibringt, das noch nicht einmal kompiliert, ist es offenbar schlecht.
Oder hoffnungslos veraltet. Ich tippe mal dass das Buch bzw. die Stelle vor C++11 entstanden ist. Damals gab es noch kein std::array.
Nein, VLAs waren noch nie richtig, in keinem C++-Standard.
std::array
ist hier auch das falsche Mittel, weil es eben nicht dynamisch ist.std::vector
ist korrekt und den gibt es seit dem 1. Standard.
-
@SeppJ sagte in Array in einer while Schleife:
Nein, VLAs waren noch nie richtig, in keinem C++-Standard.
std::array
ist hier auch das falsche Mittel, weil es eben nicht dynamisch ist.std::vector
ist korrekt und den gibt es seit dem 1. Standard.Kann man ein std::array denn nicht mit
int i; std::cin >> i; std::array<int, i> arr;
erstellen?
-
Nein, denn ein Template-Parameter muß ja eine Compilezeit-Konstante sein.
-
Ach jo ... manchmal hat man aber auch ein Brett vor dem Kopf ...
-
@Mechanics
Sorry, hast recht. Habe es gerade überprüft. Ich habe da wohl etwas durcheinandergebracht.