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.