S
Simon2 schrieb:
sW00p schrieb:
...
d.h. das wäre dasselbe wie:
class A{
public:
int i;
A(){ i=1;};
}
[/cpp]
Nicht ganz !
A(){ i=1;};
wird intern zu
A() : i() { // i wird erstmal "default-konstruiert" ..
i=1; // ... und dann zugewiesen
};
sW00p schrieb:
...
CSsaDlg(CSettings* set) settings(set);
...
CSsaDlg(CWnd* pParent = NULL,CSettings* set) settings(set);
Du hast auch nicht genau hingesehen beim Abtippen: Die Initialisierungsliste
wird mit einem Doppelpunkt eingeleitet und
ist Teil der Implementierung des Konstruktors; Deswegen müssen mindestens leere "{}" folgen und wenn man die Implementierung getrennt wird (z.B. in ein cpp-File ausgelagert), gehört sie auch dahin.
verdammt du ahst recht ^^ weggeschaut, ignoriert, gekniffen *fg
=>
CSsaDlg(CSettings* set) : settings(set) {}
...
CSsaDlg(CWnd* pParent = NULL,CSettings* set) : settings(set) {}
BTW1: In C++ ist es üblicher, statt "NULL" direkt eine "0" zu nehmen....
BTW2: Nach Default-Parametern ( "pParent = NULL" ) darf kein "verpflichtender" mehr kommen (woher soll der Compiler sonst die Zuordnung hinbekommen ?). Also: Entweder auch für "set" einen Defaultwert angeben oder Parameter vertauschen oder Deafultwert für pParent weglassen.
Gruß,
Simon2.
werde ich mal ausprobieren ob das mit dem vertauschen funzt.
zu btw1:
der konstruktor wurde vom visual c++ erstellt, daher NULL und nich 0, aber danke für den hinweis
zu btw2:
kann ich denn den default wert für pParent einfach weglassen, wenn doch vc in extra erzeugt hat?
/EDIT/
oh was mit da grad auffält was ich vergessen ahtte hinzuschreiben ist:
das mit
CSsaDlg(CSettings* set) settings(set);
...
CSsaDlg(CWnd* pParent = NULL,CSettings* set) settings(set);
bezog sich hierauf:
class C { // hält einen Pointer auf ein A
A* meinA;
public:
C(A* a) meinA(a) {}
void incA() {++a->i; }
};
und da ist ja auch kein : zu sehen.
greetz
/EDIT2/
so ich glaub jetzt hab ich kapiert wie du das meinst.geht auch mit dem : ^^
ich glaub wir ham blos ein wenig aneinander vorbeigeredet, ich versuch das hier nochmal zu verdeutlichen. Wir sind aber nahe an der Lösung ^^
class CSettings
{
public:
CSettings();
.
.
private:
.
.
.
};
class CSsaDlg : public CDialog
{
public:
CSsaDlg(CSettings* settings,CWnd* pParent = NULL)
.
.
private:
.
.
.
protected:
.
.
.
};
class CSettings_general : public CDialog
{
public:
CSettings_general(CSettings* set,CWnd* pParent = NULL);
.
.
private:
.
.
.
protected:
.
.
.
};
jetzt brauche ich in den klassen CSsaDlg und CSettings_general dasselbe objekt von CSettings.später kommen noch weitere klassen dazu, die auch wieder genau desselbe objekt von CSettings haben sollen.sprich CSettings ist global einmal vorhanden.
eine main hab ich nicht, da GUI.
ich hoffe nun ist deutlich geworden was ich brauche *gg
manchmal drück ich mich ein wenig unverständlich aus ^^
greetz