CONST kann nicht initialisiert werden



  • Huhu

    ich hab hier in meine Header Datei eine CONST deklariert

    CONST	float Z;
    

    die wollte ich jetzt im Konstruktor initialisieren

    [cpp]
    CAFKDlg::CAFKDlg(CWnd* pParent /=NULL/)
    : CDialog(CAFKDlg::IDD, pParent)
    {
    //{{AFX_DATA_INIT(CAFKDlg)
    m_intDaten = 0;
    Z = 1;
    //}}AFX_DATA_INIT
    // Beachten Sie, dass LoadIcon unter Win32 keinen nachfolgenden DestroyIcon-Aufruf benötigt
    m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
    }
    [/cpp]

    dabei sagt er mir:

    error C2758: 'Z' : muss in der Basisklassen/Element-Initialisierungsliste des Konstruktors initialisiert werden

    Dann hab ich die Initialisierung in der Headerdatei gemacht

    CONST	float Z = 1;
    

    aber dabei sagt er mir auch, dass dies nicht möglich ist. kann mir jemand sagen, wie ich das jetzt machen muss?

    danke schonmal im voraus



  • CAFKDlg::CAFKDlg(CWnd* pParent /*=NULL*/)
        : CDialog(CAFKDlg::IDD, pParent)
    , Z(1) // <----- Da funktioniert es.
    {
        //{{AFX_DATA_INIT(CAFKDlg)
        m_intDaten = 0;
        //}}AFX_DATA_INIT
        // Beachten Sie, dass LoadIcon unter Win32 keinen nachfolgenden DestroyIcon-Aufruf benötigt
        m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
    }
    

    So, wie du es hattest war es eine Zuweisung, jetzt ist es ein Copy-Konstruktor, der aufgerufen wird.



  • estartu_de schrieb:

    jetzt ist es ein Copy-Konstruktor, der aufgerufen wird.

    Nicht ganz.

    Es wird bei einem Objekt direkt der passende Konstruktor für diese Signatur (float) aufgerufen. Das Objekt wird an dieser Stelle erst konstruiert und mit dem Wert 1 initialisiert. Beim Copykon wäre es schon da, und würde mit 1 überschrieben, was hier aber nicht der Fall ist, es gibt insgesamt nur einen Konstruktoraufruf.

    Beweis: entsprechende Klasse schreiben und Aufruf der Konstruktoren tracen.

    Hier gibt's noch mal speziell den Sonderfall, daß float ein eingebauter Typ ist, aber sinngemäß bleibt es eine einzige Konstruktion in der Initialisiererliste, keine Kopie.



  • Okay, dann hab ich das Buch damals wohl doch nicht richtig verstanden. 😞


Anmelden zum Antworten