Willkommen ~Gast!
Registrieren || Einloggen || Hilfe/FAQ || Staff
Probleme mit der Registrierung im Forum? Melde dich unter registerEin Bild.
Autor Beitrag
000
22.03.2002, 21:03
Kriz



Das Problem erscheint für mich auf den ersten Blick nicht lösbar, aber eventuell weiß jemand Rat. Mein Problem ist, daß ich in einer Klasse ein statisches struct-Array habe. Dieses möchte ich bei der Definition gerne mit Werte belegen, also die Elemente jedes einzelnen structs vorbelegen. Der Einfacheit halber hier ein Beispielcode:
Quellcode:--- HEADERDATEI ---

// Struktur

struct Struktur
{
....char* string;
....int value;
....bool mode;
....
....// Struktur-Konstruktor mit Default-Werten
....Struktur(char* s = NULL, int v = 0, bool m = false) : string(s), value(v), mode(m) {}
};

// Klasse

class Klasse
{
....static Struktur m_Strukturarray[ ]
public:
....Klasse() {};
....~Klasse() {};
};
Soviel erstmal zur Headerdatei. Wenn man also ein neues Objekt vom Typ Struktur anlegt, kann man entweder dem Objekt drei Werte übergeben oder einfach die Struktur mit seinen Defaultwerten vorbelegen lassen:
Quellcode:Struktur a; // Defaultbelegung
Struktur b("Hallo Welt", 4000, true); // Eigene Belegung
Nun zur Quelldatei, wo das statische Struktur-Array deklariert werden muß:Quellcode:// --- Quelldatei ---

#include "headerdatei.h"

Struktur Klasse::m_Strukturarray[ ] = { ???????? };
Tja, hier kommt nun mein Problem: Wie schaffe ich es, daß ich den Klammerblock als "Initialisierungsliste" mißbrauchen kann und C++ den Inhalt häppchenweise dem Struktur-Konstruktor zuführt? Also zum Bleistift:Quellcode:Struktur Klasse::m_Strukturarray[ ] =
{
....{"Hallo", 1, false},
....{"Welt", 2, true},
....{"!", 3, false}
};
Hat jemand ne Ahnung, ob das überhaupt möglich ist. In der obigen Art und Weise spuckt der Compiler aus, daß hier zuviele Initialisierungen vorliegen...

Cu

--

K:R-I)Z++
"CSS ist cascading style sheets. Und nicht so'n Ranzspiel." - dp
In memory of Voice († 2005/03/30)

zum Seitenanfang zum Seitenende Profil || Suche
001
22.03.2002, 23:15
Kriz



Ok, hier die Lösung und durch Try-and-Error rausbekommen:
Quellcode:--- Quelltext ---

#include "headerdatei.h"

Struktur Klasse::m_Strukturarray[ ] =
{
....Struktur("Hallo", 1, false),
....Struktur("Welt", 2, true),
....Struktur("!", 3, false)
};

Und da sag mal einer was, Programmieren wäre immer einfach. Die Lösung hat mich 1 1/2 Stunden Zeit gekostet!

Cu

--

K:R-I)Z++
"CSS ist cascading style sheets. Und nicht so'n Ranzspiel." - dp
In memory of Voice († 2005/03/30)

zum Seitenanfang zum Seitenende Profil || Suche
002
23.03.2002, 09:27
shoo.



penner :D

--

zum Seitenanfang zum Seitenende Profil || Suche
003
23.03.2002, 18:00
Prefect



Hrhr, noch ein Thread wie dieser hier. Immerhin hab ich auf diese Weise auch noch was dazugelernt :D

Wobei ich ja generell, wenn ich denn C++ verwende, diesen C++-Stil nicht verwende. Wenn ich C++ programmiere ist das eigentlich mehr verbessertes C, während ja das "richtige" C++ zum Teil auf einer ganz anderen Philosophie basiert (so mit Referenzen und so *g*). Whatever.

cu,
Prefect

--

Widelands - Gemütliche Aufbaustrategie, Free Software
Noch ein Blog - Lerne, wie die Welt wirklich ist, aber vergiss niemals, wie sie sein sollte.

zum Seitenanfang zum Seitenende Profil || Suche
004
23.03.2002, 19:12
Kriz



Naja, wenn der Herr C mal gestern im Channel gewesen wäre, hätte er eine gewisse Diskussion um dieses Problemchen mitbekommen :)

Und vergleichbar mit dem von dir geposteten Thread ist dieser hier kaum, da ich wenigstens das Problem + die Lösung gepostet habe, hehe.

--

K:R-I)Z++
"CSS ist cascading style sheets. Und nicht so'n Ranzspiel." - dp
In memory of Voice († 2005/03/30)

zum Seitenanfang zum Seitenende Profil || Suche
005
23.03.2002, 20:16
Prefect



Hmm, ich war gestern (und heute und morgen) mit Orchesterproben beschäftigt, von daher...

Und ich kann durchaus zwischen den beiden Threads unterscheiden. Was meinst du, wofür der zweite Satz (der mit immerhin anfängt) da ist ;)

cu,
Prefect

--

Widelands - Gemütliche Aufbaustrategie, Free Software
Noch ein Blog - Lerne, wie die Welt wirklich ist, aber vergiss niemals, wie sie sein sollte.

zum Seitenanfang zum Seitenende Profil || Suche
006
24.03.2002, 01:27
Kriz



hehe

--

K:R-I)Z++
"CSS ist cascading style sheets. Und nicht so'n Ranzspiel." - dp
In memory of Voice († 2005/03/30)

zum Seitenanfang zum Seitenende Profil || Suche
007
24.03.2002, 16:30
[RMen]OneStone



Quellcode:#include <stdio.h>

typededef struct
{
-int a, b, c:
} test_t;

class CKlasse
{
public:
test_t tMyStruct;
CKlasse();
}

CKlasse::CKlasse()
{
-tMyStruct = { {0, 1, 2 }, {2, 1, 0}, {0190, 666, 666} };

-for(int i = 0; i < 3; i++)
--printf((i == 2 ? "%i/%i-%i\n" : "%i %i %i\n"), tMyStruct[ i ].a, tMyStruct[ i ].b, tMyStruct[ i ].c);
}

Output:
0 1 2
2 1 0
0190/666-666

--

georg-wicherski@pixel-house.net | http://www.pixel-house.net/ - Coding Resource| http://www.google.de/


Dieser Beitrag wurde am 24.03.2002 um 16:31 von [RMen]OneStone bearbeitet.
zum Seitenanfang zum Seitenende Profil || Suche
008
24.03.2002, 18:26
Prefect



Was will uns dieser Post sagen?

cu,
Prefect

--

Widelands - Gemütliche Aufbaustrategie, Free Software
Noch ein Blog - Lerne, wie die Welt wirklich ist, aber vergiss niemals, wie sie sein sollte.

zum Seitenanfang zum Seitenende Profil || Suche
009
24.03.2002, 18:29
blair



Ach prefect....
Jetzt hab ich hier bald 2 stunden gewartet, damit kriz direkt was dazu sagen kann, und jetzt kommst du... *snief*
unfair, etc etc etc

--

because our freedom sits at the end of a gun
we're all here getting beat up and held back
we're all here digging knives from our backs

zum Seitenanfang zum Seitenende Profil || Suche
010
25.03.2002, 00:26
Kriz



Was soll ich dazu sagen? Das war...

a) nicht mein gefragtes Problem... Es ging um statische Strukturarrays und nicht um objektabhängige Strukturinstanzen. Von daher berührt mich dieser oberschlaue "Jetzt-stell-ich-den-Kriz-mal-als-Idioten-da" Versuch überhaupt nicht.

b) nur Mist, da sein Code überhaupt nicht funktionieren kann. Denn einen normale Instanz einer Struktur läßt sich nicht durch die Angabe von multidimensionalen Arrayinitialisierungen in ein Array umwandeln. Wenn das sein Compiler kann, dann ist dieser Compiler alles... Nur nicht ANSI! Eventuell isses ein ARM-Compiler? Hrhrhrhr...

--

K:R-I)Z++
"CSS ist cascading style sheets. Und nicht so'n Ranzspiel." - dp
In memory of Voice († 2005/03/30)

zum Seitenanfang zum Seitenende Profil || Suche
011
25.03.2002, 00:43
blair



auf vielfachen wunsch eines einzelnen hier nochmal ein comment von mir:

lieber onestone: lass das (c/c++) coden.
is nich böse gemeint oder so...

aber erst prefect vorschlagen er soll auf sizeof verzichten und stattdessen _msize verwenden (erde an onestone: _msize is nichmal ansi) und dann das hier.

Zitat:

typededef struct

ich wunder mich eh schon wie du aus dem teil ne ausgabe rauskriegst. aber die verwendung des schlüsselworts
Quellcode:
typededef

lässt mich stark vermuten das du in der falschen sprache bist.

--

because our freedom sits at the end of a gun
we're all here getting beat up and held back
we're all here digging knives from our backs


Dieser Beitrag wurde am 25.03.2002 um 00:44 von Blair bearbeitet.
zum Seitenanfang zum Seitenende Profil || Suche
012
25.03.2002, 00:50




(none)

--

zum Seitenanfang zum Seitenende Profil || Suche
013
25.03.2002, 14:55
TheTinySteini



Ich höre zwar net auf den Namen OneStone, aber vielleicht darf ich ja trotzdem erklären?

(i == 2 ? "%i/%i-%i\n" : "%i %i %i\n")

ist eine kurze Version von
if( i == 2 )
..return "%i/%i-%i\n";
else
..return "%i %i %i\n";

Also steht da, wenn i == 2:
printf( "%i/%i-%i\n", tMyStruct[ i ].a, tMyStruct[ i ].b, tMyStruct[ i ].c);

sonst:
printf( "%i %i %i\n", tMyStruct[ i ].a, tMyStruct[ i ].b, tMyStruct[ i ].c);

--

TheTinySteini
Coder Poke646
"Don't Panic" - Hitchhiker's Guide to the Galaxy

zum Seitenanfang zum Seitenende Profil || Suche
014
25.03.2002, 15:33
mani



ich glaube, dass hat gumble auch gewusst, aber den sinn hat er und ich noch nicht so raus

--

zum Seitenanfang zum Seitenende Profil || Suche
015
25.03.2002, 17:49
blair



gumble weiß es inzwischen, aber dir erkärs ichs auchnochmal:

OneStone wollte zeigen das er den Konditionalen Dreifachoperator draufhat.

--

because our freedom sits at the end of a gun
we're all here getting beat up and held back
we're all here digging knives from our backs

zum Seitenanfang zum Seitenende Profil || Suche
016
25.03.2002, 17:59
Hellfire



... oder dass er eine Ausgabe mit einem nicht kompilierbaren Code zustande bringt.

--


Dieser Beitrag wurde am 25.03.2002 um 18:01 von Hellfire bearbeitet.
zum Seitenanfang zum Seitenende Profil || Suche
017
25.03.2002, 18:07
mani



<spam> hm der lässt sich mit l33t0 c0mp1l3r v.1.o ganz gut kompilieren :) </spam>

--

zum Seitenanfang zum Seitenende Profil || Suche
018
25.03.2002, 23:55
Kriz



Damit lassen wir es gut sein, da wir jetzt wissen, daß [RMen]OneStone von C/C++ nicht mehr Ahnung hat wie ein Stein (welch Ironie des Schicksals).

--

K:R-I)Z++
"CSS ist cascading style sheets. Und nicht so'n Ranzspiel." - dp
In memory of Voice († 2005/03/30)

zum Seitenanfang zum Seitenende Profil || Suche