Konstanten Wert eintragen

EddieG

Erfahrenes Mitglied
Hi,
kann es sein das man keinen konstanten wert definieren kann nach eingabe in der Konsole?
Ich frage deshalb, da ich etwas programmiere und eine Matrix für verwende.
allerdings benötigt diese ja konstante werte.
Ich dachte mit
Code:
const int h = setWert();
const int b = setWert();
char matrix[h][b] = {char(255)};
Aber da merkert der compiler.
 
Der Wert einer Konstante darf nur einmal festgelegt werden, danach darf er nicht mehr verändert werden!
Aber die dritte Zeile deines Codes sieht ziemlich komisch aus!

Wie lautet denn der Fehler?
 
Zuletzt bearbeitet:
Hast meine Frage schon beantwortet.
Gewollt war die werte für die Matrix zu definieren.
damit es nicht im Code fest definiert ist [4][4] als Bsp. Ich wollte es so halten das man selbst die Größe definiert.
Der Fehler ist einfach das in der Matrix das b und h rot unterstrichen sind weil es keine konstanten sind.
Was für mich heißt ich muss die Eingabe Funktion wieder entfernen und direkt eine zahl rein schreiben
const int b = 4 ;
Naja schade, aber da kann man halt nichts dran ändern.
 
Man kann das schon veränderbar machen, ist allerdings nicht ganz so einfach wie bei fixen Größen.

Google mal nach new und delete bzw. malloc/realloc/free, Beispiele gibt es genug.
 
Der Wert einer Konstante muss schon zur Kompilierungszeit bekannt sein!
Unsinn. Der Wert einer Konstante kann auch erst zur Laufzeit festgelegt werden. Er darf nur nach der Initialisierung nicht mehr verändert werden.

@EddieG: Objekte variabler Größe können nicht auf diese Weise initialisiert werden. Du musst manuell über das Array laufen und die einzelnen Elemente initialisieren.

\edit: Ich sollte vielleicht noch erwähnen, dass Arrays variabler Länge (variable-length arrays, VLAs) nicht zum aktuellen C++-Standard gehören. In C gibt es sie seit C99.

Grüße,
Matthias
 
Zuletzt bearbeitet:
Unsinn. Der Wert einer Konstante kann auch erst zur Laufzeit festgelegt werden. Er darf nur nach der Initialisierung nicht mehr verändert werden.

Ich habe es gerade ausprobiert. Stimmt, Danke!
Aber irgendwie ging das bei meinem früheren Compiler nicht.

\edit: Ich sollte vielleicht noch erwähnen, dass Arrays variabler Länge (variable-length arrays, VLAs) nicht zum aktuellen C++-Standard gehören. In C gibt es sie seit C99.
Du meinst aber nicht Vektoren (std::vector), oder?
 
Also ich habe was gefunden und zwar den array mit new zu definieren allerdings klappt es nur beim 1dim Array
Beim 2dim läuft es wohl anders habe ich leider noch nicht gefunden.
Mein Ansatz war
Code:
int k=1;
cin >> k;
int b = 1;
cin >> b;
char *matrix = new char[k][b];
Ok habs raus gefunden mit new char[k*b] klappt es wohl, nun ist nur noch die Frage wie ich es ausgebe
bzw. Einträge ändern kann
innerhalb einer verschachtelten For schleife geht diese Anweisung wohl nicht -.-
Code:
matrix[i][j] = char(177);
 
Zuletzt bearbeitet:
Ok habs raus gefunden mit new char[k*b] klappt es wohl, nun ist nur noch die Frage wie ich es ausgebe
bzw. Einträge ändern kann
Wenn du k als Zeilen und b als Spalten betrachten würdest, würde das so gehen:
C++:
/* i entspricht der Zeilennummer;
   k entspricht der Spaltennummer */
matrix[b*i + j] = char(177);

Ich habe mal bessere Variablennamen vergeben und ein Beispiel hinzugefügt ;)
C++:
const int rows = 10;
const int cols  = 10;

char *matrix = new char[cols*rows];

/* auf Zeile i, Spalte j zugreifen */
matrix[cols*i + j] = char(177);

/* Ausgeben */
for (int r=0; r<rows; r++)
{
  for (int c=0; c<cols; c++)
  {
    cout << matrix[cols*r + c] << " ";
  }
  cout << endl;
}
 
Zuletzt bearbeitet:
Deine Bessere Variante ist super ;)
das Prinzip der Verrechnung bei der Schreibweise verstehe ich leider noch nicht
matrix[rows*i + j];

gibt es eigentlich eine Möglichkeit auf ein Array Feld zuzugreifen durch die Operation array[j-1] ?
Hat jetzt zwar nicht mit der dynamischen Eingabe zu tun, aber wenn wir schon mal beim Thema arrays sind ;)
 
Zuletzt bearbeitet:
Zurück