none
Strukturen initialisieren RRS feed

  • Frage

  • Hallo,

    ich möchte im Konstruktor meiner Klasse Membervariablen initialisieren.

    Die Membervariable ist ein pair aus einem String und einer verschachtelten Struktur.

    Die Struktur setzt sich folgendermaßen zusammen:

    typedef enum  param_value_types  {
       PRO_PARAM_DOUBLE  = 50,
       PRO_PARAM_STRING  = 51,
       PRO_PARAM_INTEGER = 52,
       PRO_PARAM_BOOLEAN = 53,
       PRO_PARAM_NOTE_ID = 54,
       PRO_PARAM_VOID    = 57
    }  ProParamvalueType;

    typedef union param_value_values {
        double  d_val;
        int     i_val;
        short   l_val;
        ProLine s_val;
    }  ProParamvalueValue;


    typedef struct  Pro_Param_Value  {
      ProParamvalueType   type;
      ProParamvalueValue    value;
    }  ProParamvalue;

    Membervariable ist so deklariert:

    pair <string, ProParamvalue> m_Test;

    Kann ich diese Membervariable jetzt im Konstruktor meiner Klasse initialisieren???

    Vielen Dank für die Bemühungen!

    Gruß Lars

    Freitag, 19. November 2010 09:27

Antworten

  • Nein!

    Solch eine Initialisierung ist nur für Variablen möglich, aber nicht in der Member Definition ein Klasse im Konstruktor. Also das geht nicht:

    struct S {
    int a;
    double b;
    };
    
    class C
    {
    public:
        C()
     : m_s = { 1,3.0 } // GEHT NICHT!!!
        {
        }
    private:
        S m_s;
    };

    Du könntest den Umweg gehen und im Konstruktor eine temporäre Variabe mit { deine Daten } initialisieren und diese zuweisen.

    Aber warum machst Du es nicht sauber und verpasst Deiner struct einen vernünftigen Konstruktor?


    Martin Richter -- MVP for VC++ [Germany] -- http://blog.m-ri.de
    Freitag, 19. November 2010 10:27
    Moderator
  • Die struct ist aus einer Fremd-API.
    Drum ändere ich diese nicht.

    Na und. struct ableiten. Eigene struct bauen mit Konstruktoren... ;)


    Martin Richter -- MVP for VC++ [Germany] -- http://blog.m-ri.de
    • Als Antwort markiert Lamizi Montag, 22. November 2010 06:24
    Freitag, 19. November 2010 12:26
    Moderator
  • Warum nicht einen passenden Wertkonstruktor für die eigene Klasse, mit dem Parameter  "pair <string, ProParamvalue> wert", mit dem Parameter kann man dann doch den Member initialisieren.
    - Florian
    • Als Antwort markiert Lamizi Montag, 22. November 2010 06:25
    Freitag, 19. November 2010 15:03

Alle Antworten

  • Ich sehe keinen Grund warum das nicht gehen sollte. Warum zweifelst Du das es geht?
    - Florian
    Freitag, 19. November 2010 10:25
  • Nein!

    Solch eine Initialisierung ist nur für Variablen möglich, aber nicht in der Member Definition ein Klasse im Konstruktor. Also das geht nicht:

    struct S {
    int a;
    double b;
    };
    
    class C
    {
    public:
        C()
     : m_s = { 1,3.0 } // GEHT NICHT!!!
        {
        }
    private:
        S m_s;
    };

    Du könntest den Umweg gehen und im Konstruktor eine temporäre Variabe mit { deine Daten } initialisieren und diese zuweisen.

    Aber warum machst Du es nicht sauber und verpasst Deiner struct einen vernünftigen Konstruktor?


    Martin Richter -- MVP for VC++ [Germany] -- http://blog.m-ri.de
    Freitag, 19. November 2010 10:27
    Moderator
  • Hallo!

    Danke für die Info!
    Die struct ist aus einer Fremd-API.
    Drum ändere ich diese nicht.

    Gruß Lars

    Freitag, 19. November 2010 12:03
  • Die struct ist aus einer Fremd-API.
    Drum ändere ich diese nicht.

    Na und. struct ableiten. Eigene struct bauen mit Konstruktoren... ;)


    Martin Richter -- MVP for VC++ [Germany] -- http://blog.m-ri.de
    • Als Antwort markiert Lamizi Montag, 22. November 2010 06:24
    Freitag, 19. November 2010 12:26
    Moderator
  • Warum nicht einen passenden Wertkonstruktor für die eigene Klasse, mit dem Parameter  "pair <string, ProParamvalue> wert", mit dem Parameter kann man dann doch den Member initialisieren.
    - Florian
    • Als Antwort markiert Lamizi Montag, 22. November 2010 06:25
    Freitag, 19. November 2010 15:03