struct über Klassen hinweg übergeben
-
Hallo zusammen,
ich habe in einer Klasse "Dialog" den Datentyp
struct myStruct{ int Index; TCHAR Value; };Damit mache ich dann
myStruct *Viele; Viele = new myStruct[Anzahl];Das ganze ist ein Attribt der Klasse Dialog.
Jetzt möchte ich diesen Typ an eine Klasse sortieren übergeben.
CSort *sortieren; sortieren = new CSort; CSort->qsort(Viele);Jetzt kennt ja aber die klasse Sort den Datentyp mySort nicht ...
class CSort { public: void qsort(mySort *Viele); };Nun meine Frage kann man überhaupt eigene structs über klassen hinweg übergeben ?? oder wie löst man sowas am geschicktesten ???
Danke für die Hilfe im voraus
-
Nun, ich kenne mich da auch nicht so aus, aber ich vermute mal, dass das Du die nicht über Klassengrenzen hinaus übergeben kannst.
Denn Du hast die Struktur ja wahrscheinlich aus gutem Grund klassenintern gemacht - eine Übergabe selbiger an externe Funktionen/Klassen würde dieses Konzept doch total verdrehen (mal abgesehen davon, dass ja auch niemand ausserhalb der Klasse wissen kann, wie Deine Struktur beschaffen ist und daher ein Sortieren o.ä. eh unmöglich ist).
Du wirst die Struktur dann wohl irgendwo global (oder zumidnest so, dass die betroffenen Klassen von ihr Kenntnis haben) deklarieren müssen.
-
Hallo,
Wenn myStruct im public Bereich der Klasse deklariert wurde geht das doch ganz einfach
Dialog::myStruct
-
michael: ich würd statt eines Arrays von mystructs einen std::vector benutzen, den kann man dann auch mit standardmitteln leicht sortieren, wenn man denn den entsprechenden vergleichsoperator für das struct definiert hat.
-
Ok hab ich nun so versucht. Bekomme folgenden Compiler Fehler:
'CDialog' : is not a class or namespace name
syntax error : identifier 'myStruct'aber nur wenn ich die Sort Klasse nicht in die Dialog Klasse includiere.
Lass ich das #include "Sort.h" in der Dialog Klasse weg geht es.Da ich ja aber auch ein Objekt der Klasse CSort in der CDialog haben will ist das nicht die Lösung. Muss ich noch etwas beim includieren beachten ????
Danke für eure Hilfe
-
Du brauchst CDialog in CSort.h und umgekehrt?
Mach doch einfach eine Vorwärtsdeklaration von CDialog::myStruct in CSort.h.
-
Genau die brauchen sich gegenseitig.
hmm wenn ich in CSort CDialog::myStruct mache, bekomme ich auch die Meldung nur halt mit CDialog.