Seite 1 von 1
Array in QT
Verfasst: 24. März 2011 10:08
von Hazu
hi, hab mal ne kurze Frage zu arrays in QT...
ich hab mit in meinem header das array erstellt...
und dann im konstruktor will ich es zentral an einer stele füllen, da ich alle werte kenne und die an einer stelle stehen müssen, falls sie mal geändert werden müssen...
Code: Alles auswählen
feld= {
{{32},{0},{0}}
{{32},{0},{1}}
{{32},{0},{3}}
{{32},{0},{4}}
{{10},{0},{10}}
{{10},{0},{0}}
};
so, jetzt bekomm ich aber gefühlt ne halbe millionen fehlermeldungen, unter anderem Klammerfehler und incompatible typen und sowas...
dass das array string ist, obwohl nur zahlen drin stehen muss so...
jemand ne Idee?
hab ich i-wo nen groben fehler gemacht?
Verfasst: 24. März 2011 10:59
von franzf
Wenn Fehler, dann bitte die allerersten posten, der Rest sind gerne Folgefehler.
Probleme:
* Ein int ist kein QString-> QString::number()
* Du hast ein Array mit zwei Werten, fügst aber 3 ein.
Willst du jetzt Zahlen oder Strings speichern?
Kannst du dir vllt. eine Abstraktionsklasse schreiben, die die Zugriffe erleichtert?
Verfasst: 24. März 2011 11:23
von Hazu
also, hab den quellcode jetzt etwas geändert und schonmal weniger fehler...
.h datei
.cpp-datei
Code: Alles auswählen
feld= {
{"32","0","0"},
{"32","0","1"},
{"32","0","3"},
{"32","0","4"},
{"10","0","10"},
{"10","0","0"},
};
aber es will halt immer noch nicht...
das problem schient daran zu liegen, dass ich zahlen in eine string-array speichern will...
denke ich zumindest denn der fehler, den ich bekomme lautet
incompatible types in assignment of '<brace-enclosed initializer list>' to 'QString [3][6]'
das problem ist, dass ich wirklich ein string array brauche... ich will die werte später mit noch anderen daten zu einem string zusammen fassen und dann als telegramm über einen TCPSocket verschicken...
und da dieser teil der späteren daten fest ist, wollte ich die der einfachkeit halber in einem festen array speichern...
Verfasst: 24. März 2011 12:21
von franzf
Die Zuweisung funktioniert so nicht, das geht erst ab C++0x.
Du musst das Array gleich so initialisieren, oder die Elemente durchgehen und einzeln die Werte zuweisen.
Wenn du dir das (wie erwähnt) in einer Klasse kapselst, brauchst du nur operator= und Copy-CTor anbieten, dann kannst du auch Zuweisen.
Verfasst: 24. März 2011 12:21
von upsala
Sehe ich das falsch, oder sollte das nicht
heißen?
Verfasst: 24. März 2011 12:27
von franzf
@upsala:
Ja, klar, das siehst du richtig

Verfasst: 24. März 2011 13:00
von Hazu
also gibt es keine möglichkeit wie ich das Array da so in meine bestehene klase bekomm?
hach, langsam bin ich am verzweifeln...
ich muss doch nur diese dummen daten in mein programm an zentraler stelle einschleusen...
mit konstanten hab ichs probiert, das klappt i-wie net und jetz mitm Array auch net....
Verfasst: 24. März 2011 14:29
von samir_bmw
Code: Alles auswählen
feld= {{QString::number(32), QString::number(0), QString::number(0)}, und so weiter.
Verfasst: 24. März 2011 15:14
von Hazu
Code: Alles auswählen
feld= {
{QString::number(32), QString::number(0), QString::number(0)},
{QString::number(32), QString::number(0), QString::number(1)},
{QString::number(32), QString::number(0), QString::number(3)},
{QString::number(32), QString::number(0), QString::number(4)},
{QString::number(10), QString::number(0), QString::number(10)},
{QString::number(10), QString::number(0), QString::number(0)},
};
hab das ganze jetzt so geschrieben, aber ich hab immer noch den gleichen fehler wie oben....
Verfasst: 24. März 2011 15:24
von samir_bmw
Code: Alles auswählen
QString feld[6][3] = {
{QString::number(32), QString::number(0), QString::number(0)},
{QString::number(32), QString::number(0), QString::number(1)},
{QString::number(32), QString::number(0), QString::number(3)},
{QString::number(32), QString::number(0), QString::number(4)},
{QString::number(10), QString::number(0), QString::number(10)},
{QString::number(10), QString::number(0), QString::number(0)},
};
Verfasst: 24. März 2011 20:26
von franzf
Warum muss das denn jetzt unbedingt ein Member werden? (Es geht schon als Member, aber das ist etwas umständlicher).
Wo fasst du denn die anderen Daten zusammen? Wenn das in EINER Methode geschieht, dann leg das Array doch als lokal in der Methode an.
Das ist überhaupt ein sinnvolles Prinzip: Variablendeklarationen so lokal wie möglich. (lokal in einer Methode, wenns nur dort gebraucht wird, private, wenn du Zugriffe wegkapseln kannst, usw.)
Verfasst: 24. März 2011 23:24
von Christian81
Eine weitere Frage wäre was man damit überhaupt erreichen will - was soll das Ganze? Wozu die ganzen Strings?
Der Rest sind C++ Grundlagen...
Verfasst: 25. März 2011 07:22
von franzf
Schau mal hier rein:
http://www.cplusplus.com/doc/tutorial/arrays/
Speziell "Initializing arrays" und "Multidimensional arrays".
// edit:
Wusst ich doch, das es da was von boost gibt:
http://www.boost.org/doc/libs/1_46_1/li ... /user.html
Aber das wäre absolut mit Kanonen auf Spatzen geschossen, da ich den Sinn des Einsatzes etwas anzweifel.