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.


Log in to reply