Array in QT

Du bist neu in der Welt von C++? Dann schau hier herein!
Antworten
Hazu
Beiträge: 12
Registriert: 7. Februar 2011 10:56

Array in QT

Beitrag von Hazu »

hi, hab mal ne kurze Frage zu arrays in QT...

ich hab mit in meinem header das array erstellt...

Code: Alles auswählen

QString feld[2][5];
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?
franzf
Beiträge: 3114
Registriert: 31. Mai 2006 11:15

Beitrag 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?
Hazu
Beiträge: 12
Registriert: 7. Februar 2011 10:56

Beitrag von Hazu »

also, hab den quellcode jetzt etwas geändert und schonmal weniger fehler...

.h datei

Code: Alles auswählen

	QString feld[3][6];
.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...
franzf
Beiträge: 3114
Registriert: 31. Mai 2006 11:15

Beitrag 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.
upsala
Beiträge: 3946
Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:

Beitrag von upsala »

Sehe ich das falsch, oder sollte das nicht

Code: Alles auswählen

QString feld[6][3];
heißen?
franzf
Beiträge: 3114
Registriert: 31. Mai 2006 11:15

Beitrag von franzf »

@upsala:
Ja, klar, das siehst du richtig :)
Hazu
Beiträge: 12
Registriert: 7. Februar 2011 10:56

Beitrag von Hazu »

also gibt es keine möglichkeit wie ich das Array da so in meine bestehene klase bekomm?
:cry:
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....
samir_bmw
Beiträge: 41
Registriert: 11. Juli 2008 16:51

Beitrag von samir_bmw »

Code: Alles auswählen

feld= {{QString::number(32), QString::number(0), QString::number(0)}, und so weiter.
Hazu
Beiträge: 12
Registriert: 7. Februar 2011 10:56

Beitrag 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....
samir_bmw
Beiträge: 41
Registriert: 11. Juli 2008 16:51

Beitrag 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)},
   };
franzf
Beiträge: 3114
Registriert: 31. Mai 2006 11:15

Beitrag 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.)
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag 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...
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
franzf
Beiträge: 3114
Registriert: 31. Mai 2006 11:15

Beitrag 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.
Antworten