Struct casten? Struct in Array speichern?



  • Moin!
    Ich habe das Problem, dass ich ein Struct-Element in einem Array speichern will. Würde bestimmt klappen, wenn es keinen Fehler geben würde ^^
    Hier mein Code:

    struct test{
      int a,b;
    };
    
    test arr[2];
    test t = {1,2};
    arr[0] = t; // so klappt es... Ist aber zu umständlich
    
    arr[1] = {1,2}; // so aber nicht =( So hätte ich es aber gerne.
    

    Jetzt habe ich versucht es zu casten
    arr[1] = (test){1,2};
    ging aber auch nicht 😕

    Habt ihr eine Ahnung?



  • Du kannst einzelnen Array-Elementen nicht mit der Initialisierer-Syntax Werten zuweisen, aber es gibt zwei Alternativen.
    Entweder das gesamte Array:

    test arr[2] =
    {
      { 1, 2 },
      { 3, 4 }
    };
    

    oder aber du erzeugst dir einen Konstruktor für die Struktur

    struct test{
      int a,b;
    
      test(int aa=0, int bb=0) // Konstruktor mit Default-Argumenten
        : a(aa), b(bb) // Initialisierer-Liste
      {};
    };
    
    test arr[2]; // Initialisierung mit Default-Konstruktor: test(0, 0)
    
    arr[0] = test(1, 2); // Zuweisung der konstruierten Struktur
    

  • Mod

    Th schrieb:

    oder aber du erzeugst dir einen Konstruktor für die Struktur

    Eine normale Funktion kann diesen Zweck auch erfüllen und ist nicht weniger effizient. Nützlich ist das dann, wenn die Struktur ein POD sein soll (mit C++0x entfällt dieses Argument dann allerdings):

    test make_test(int a=0, int b=0)
    {
        test x = { a, b };
        return x;
    }
    
    test arr[2];
    arr[0] = make_test(1, 2);
    

    Eine verschachtelte Aggregatinitialisierungsliste ist nat. ebenso möglich.



  • Bestens - vielen Dank 😉


Log in to reply