Struct Default-Constructor
-
Hi,
ich möcht ein einem struct u.a. eine const Referenz speichern
typedef struct { const MyObj &foo; } test_t;Das funktioniert aber nicht, da er lt. Compiler Error keinen Default Constructor kennt. Kann ich das trotzdem irgendwie erreichen?
danke
-
Hallo,
die einzige Möglichkeit ist dem struct einen Konstruktor zu verpassen.
struct TTest { TTest(const MyObj& obj) : foo(obj) {} const MyObj &foo; };
-
Erklärung: Eine Referenz kannst du nicht uninitialisiert stehenlassen - die muß gleich bei der Erzeugung mit einer Variable verknüpft werden. Und deswegen kann der Compiler auch keinen Default-Ctor für deine Struktur erzeugern (woher soll er denn wissen, auf welche Variable die Referenz verweisen soll?).
-
Ansonsten nimmst du eben einen Zeiger, is aber wesentlich gefährlicher!

-
David_pb schrieb:
Ansonsten nimmst du eben einen Zeiger, is aber wesentlich gefährlicher!

.. und bedeutet IMO auch etwas (leicht) Anderes.
(Ach ja: Übernimm ruhig mal die C++-Schreibweise)
struct test_t { const MyObj &foo; };bedeutet "Ohne sein (festes) MyObj kann kein test_t sein"
struct test_t { const MyObj *foo; };bedeutet "Einem test_t kann ein (wechselndes) MyObj zugeordnet sein"
"Zugeordnet" ist dabei weicher und man muß sich dabei z.B. Gedanken darüber machen, wann/wer ein MyObj erzeugen/vernichten und einem test_t zuordnen soll...Welches besser passt, hängt von den Anforderungen an die Anwendung ab.
Gruß,
Simon2.