Struktur C++



  • Hallo ,

    wieso funktioniert das nicht ?

    #include <iostream>
    
    struct test{
    
    int x;char b;float z;
    
    };
    
    int main()  {
    
    	test x{ 3,'A',2.3};
    
    	std::cout<<x.z;
    
    }
    


  • OK schon erledigt

    = vergessen



  • Weil deine Struktur nur einen Standardkonstruktor hat

    struct test
    {
       test(int x,char b,float z) : x(x),b(b),z(z)
       { }
    
       int x;
       char b;
       float z;
    };
    


  • Pellaeon schrieb:

    Weil deine Struktur nur einen Standardkonstruktor hat

    Nein, das ist hier nicht das Thema (Berücksichtige bitte auch die geschweiften Klammern bei der Strukturinitialisierung). Die Konstruktoren sind zwar in C++ durchaus ein üblicher Weg, bei PODs gibt es aber auch andere Alternativen.



  • Bei z. B. int-Feldern usw., ja da geht das. Aber bei einer Struktur/Klasse doch erst in C++0x !?



  • asc schrieb:

    Die Konstruktoren sind zwar in C++ durchaus ein üblicher Weg, bei PODs gibt es aber auch andere Alternativen.

    Genau genommen hat das nichts mit PODs zu tun, sondern mit Aggregaten. Darunter fallen neben Arrays auch eingeschränkte Klassen.

    // Offensichtlich keine POD-Klasse
    struct MyClass
    {
        std::string str;
        int num;
    };
    
    // Aggregats-Initialisierungsliste ok
    MyClass obj = {"hallo", 47};
    

    Allerdings gibt es in modernerem C++ eher wenige Anwendungsfälle, da Konstruktoren sicherer und flexibler sind. Als Beispiel fällt mir gerade std::tr1::array ein. Mit std::initalizer_list in C++0x dürfte sich das Thema aber erledigen, weil dann eine Koexistenz von Initialisierungslisten und Konstruktoren möglich wird.



  • Vorteile class gegenüber struct ?

    Vererbung was noch ?



  • dd66 schrieb:

    Vorteile class gegenüber struct ?

    Vererbung was noch ?

    Nein. Einziger Unterschied ist das class default private ist und struct default public. Das war es.



  • aha . dachte immer das wäre was komplett anderes.

    Noch eine Frage.

    wenn ich in einer Datei eine funktion static deklariere, und diese
    Datei in eine andere einbinde, dann ist die static funktion trotzdem nicht
    sichtbar ?



  • Doch, sie ist sichtbar, aber existiert einmal für jede Übersetzungseinheit, und nicht wie extern -Funktionen einmal pro Programm.

    Stichwort interne Linkage.


Log in to reply