hallo,
ich hab eine frage zu c++/standardprogrammierung. und zwar will ich in eine anwendung eine tabelle reinmachen mit den variablen maßen zwischen 5x5 und 9x9. da ist alles erlaubt dazwischen.
jetzt will ich jedes feld mit einem int wert "füllen". also brauche ich ein array. jedoch können arrays nicht dynamisch erstellt werden. die werte müssen bei der kompilierung schon klar sein. wie kann ich das jetzt lösen?
wie ich die tabelle "graphisch" erstelle weiss ich schon.
danke, moritz
dynamisches array
Wenn die Größe zur Compilezeit schon klar sind, kannst du die Array-Größe über ein
define festlegen:
#define ARRAY_SIZE 5
...
int array[ARRAY_SIZE];
oder alternativ, mit echter dynamischer Größe, kannst du dir mal vector aus der STL anschauen. (http://www.cplusplus.com/reference/stl/)
define festlegen:
#define ARRAY_SIZE 5
...
int array[ARRAY_SIZE];
oder alternativ, mit echter dynamischer Größe, kannst du dir mal vector aus der STL anschauen. (http://www.cplusplus.com/reference/stl/)
das sind grundlagen!
vergiss das obere beispiel; beschäftige dich mal mit new und delete! wenn du sowas wie dynamische arrays erstellen willst.
int *var = new int[dim];
damit kannst du speicher allokieren (dim*int) und mit delete [] var löscht dus wieder.
ansonsten wären verkettete listen und {oder} dieQList <Template> ne möglichkeit, diese ist wohl selber eine verk. liste.
vergiss das obere beispiel; beschäftige dich mal mit new und delete! wenn du sowas wie dynamische arrays erstellen willst.
int *var = new int[dim];
damit kannst du speicher allokieren (dim*int) und mit delete [] var löscht dus wieder.
ansonsten wären verkettete listen und {oder} dieQList <Template> ne möglichkeit, diese ist wohl selber eine verk. liste.
Hallo,
die Lösung hängt schwer davon ab, was du am Ende mit den Daten anstellen willst und welche/wieviele Daten du pro Element speichern willst.
Wenn du eine Anzeige in Tabellenform (oder als Tree) planst, wäre es vielleicht am einfachsten, wenn du Deine Datenbasis direkt als Model schreibst (QAbstractItemModel). Dann könntest du mit einem Aufwasch auch gleich Icons, Tooltips, Schriftare/Farbe und ggf. Auswertungen der Daten unterbringen (z.B. Schriftfarbe, abhängig vom Wert des Feldes). Das Model könntest du dann auch gleich mit Delegates editieren über die GUI...
Wenn es einfach nur um Strings geht, die nicht in einem View angezeigt werden sollen, kann auch schon soetwas helfen (Vorsicht beim Zugriff *g*):
Du kannst auch soetwas verwegenes machen :
Möglichkeiten gibts genug, du musst entscheiden was für Dich das Beste ist.
Ciao,
Sephral
die Lösung hängt schwer davon ab, was du am Ende mit den Daten anstellen willst und welche/wieviele Daten du pro Element speichern willst.
Wenn du eine Anzeige in Tabellenform (oder als Tree) planst, wäre es vielleicht am einfachsten, wenn du Deine Datenbasis direkt als Model schreibst (QAbstractItemModel). Dann könntest du mit einem Aufwasch auch gleich Icons, Tooltips, Schriftare/Farbe und ggf. Auswertungen der Daten unterbringen (z.B. Schriftfarbe, abhängig vom Wert des Feldes). Das Model könntest du dann auch gleich mit Delegates editieren über die GUI...
Wenn es einfach nur um Strings geht, die nicht in einem View angezeigt werden sollen, kann auch schon soetwas helfen (Vorsicht beim Zugriff *g*):
Code: Alles auswählen
QHash<QString, QStringList>>
Code: Alles auswählen
QHash<QString, int> list;
// Füllen der Liste
// Koordinaten für Zugriff
QString x = "1";
QString y = "2";
int myValue = list.value(x+y);
Ciao,
Sephral
und dim muss nich zur kompilierung schon klar sein ?slash-ex hat geschrieben:das sind grundlagen!
vergiss das obere beispiel; beschäftige dich mal mit new und delete! wenn du sowas wie dynamische arrays erstellen willst.
int *var = new int[dim];
damit kannst du speicher allokieren (dim*int) und mit delete [] var löscht dus wieder.
ansonsten wären verkettete listen und {oder} dieQList <Template> ne möglichkeit, diese ist wohl selber eine verk. liste.
das wär gut, danke!
jaja das mit new hab ich eigetnlich schon begriffen.
jetzt ist da noch das problem, dass das array 2-dimensional is, weils ja ne tabelle gibt.
jetzt hab ich das so in der headerdatei gemacht: (von ner klasse)
int **feldwert;
und so in der cpp-datei
feldwert = new int[lay_x][lay_y];
da kommt aber der fehler
src\mainwindowimpl.cpp:41: error: `MainWindowImpl::lay_y' cannot appear in a constant-expression
wie gehts richtig?
danke, moritz
jetzt ist da noch das problem, dass das array 2-dimensional is, weils ja ne tabelle gibt.
jetzt hab ich das so in der headerdatei gemacht: (von ner klasse)
int **feldwert;
und so in der cpp-datei
feldwert = new int[lay_x][lay_y];
da kommt aber der fehler
src\mainwindowimpl.cpp:41: error: `MainWindowImpl::lay_y' cannot appear in a constant-expression
wie gehts richtig?
danke, moritz