Problem mit Objektreferenz
-
Hallo zusammen,
ich möchte in meinem Programm gerne in einer Ringliste alle mir bekannten Geräte speichern. Dazu habe ich folgende Prototypen definiert:class PCIDevRing { public: PCIDevRing(); ~PCIDevRing(); void addDevice(PCIDevRing ring, unsigned short vendorID, unsigned short deviceID, unsigned char bus, unsigned char device, unsigned char function); void createRing(PCIDevRing ring); unsigned int getDeviceCounter(); private: unsigned short vendorID; unsigned short deviceID; unsigned char bus; unsigned char device; unsigned char function; unsigned short counter; PCIDevRing nextDevice; PCIDevRing previousDevice; };Nun habe ich das Problem bei den letzten beiden Zeilen meckert der Compiler (g++). Ich kenne von Java her die Möglichkeit Objektreferenzen so zu speichern. G++ meldet mir jedoch "Feld <<nextDevice>> hat unvollständigen Typen." und "Feld <<previousDevice>> hat unvollständigen Typen.". Was mache ich falsch, offenbar kann ich die letzten beiden Zeilen so nicht formulieren, aber wo liegt mein Denkfehler und wie müssten diese Zeilen korrekt lauten?
Danke für eure Hilfe

-
Alle Typen, die du in einer Klasse hast, müssen vollständig bekannt sein. Das kann bei dir gar nicht der Fall sein, da du das Objekt selbst brauchst, während du noch in der Definition bist.
Die Lösung besteht darin, dass du lediglich einen Zeiger auf das Objekt speicherst, da der Typ eines Zeigers auf ein Objekt dem Compiler bekannt ist und die Grösse des Objektes selbst nicht wissen muss.
Das ist halt ein Unterschied zu Java. In C++ sind das noch wirkliche Objekte, und nicht lediglich Zeiger auf die.

-
Achso, dann also einfach so:
class PCIDevRing { public: PCIDevRing(); ~PCIDevRing(); void addDevice(PCIDevRing ring, unsigned short vendorID, unsigned short deviceID, unsigned char bus, unsigned char device, unsigned char function); void createRing(PCIDevRing ring); unsigned int getDeviceCounter(); private: unsigned short vendorID; unsigned short deviceID; unsigned char bus; unsigned char device; unsigned char function; unsigned short counter; unsigned int *nextDevice; unsigned int *previousDevice; };Müsste jetzt soweit richtig sein oder?
-
Warum unsigned int?!
PCIDevRing obj; // Objekt des Types PCIDevRing PCIDevRing* pobj; //Zeiger auf ein Objekt mit Typ PCIDevRingIch habe irgendwie das Gefühl, dass du dich nicht wirklich mit C++ beschäftig hast und die riesen Unterschiede zwischen Java und C++ nicht ganz siehst.. Syntax ist ähnlich, aber viele Konzepte sind von Grund auf anders und somit sehr verwirrend, wenn man von einem Standardverhalten ausgeht. Ich empfehle ein anständiges Tutorial zu C++ oder ein gutes Buch. Sonst wirst du nur Ärger haben, was nicht sein muss.
z.B sei gesagt, dass wenn du den Zeiger da oben hast noch kein Objekt hast. Das muss du zuerst irgendwie erzeugen. (new wahrscheinlich). Und dann musst du dich um die ganze Speicherverwaltung kümmern (mit delete wieder freigeben) und dafür sorgen,dass auch im Falle einer exception dein Objekt wieder richtig zerstört wird.. usw.