 |
C++Talk.NET C++ language newsgroups
|
| View previous topic :: View next topic |
| Author |
Message |
Ernst Baumann Guest
|
Posted: Sat Mar 25, 2006 4:31 pm Post subject: Einfache Frage zu this |
|
|
Hallo allerseits,
Durch einen Mausklick soll die in einem Ausgabefeld sich befindliche
Zahl um 1 erhöht werden.
In einem Fenster wird dazu eine "Wanze" angebracht.
In dem folgenden Programm habe ich dies "simuliert". Das
programmtechnische Problem ist, wie man in einem Objekt auf das dieses
Objekt umfassende Objekt zugreifen kann. Dies wird in C++mit this
gemacht.
Das Programm funktioniert einwandfrei, nur bekomme ich mit meinem
MS VC++ Vers. 6.0 die Warnung:
"warning C4355: this' : wird in Initialisierungslisten fuer
Basisklasse verwendet"
1)
Ist dies eine Warnung, hinter der sich ein schlimmer Programmierfehler
verbirgt, oder brauche ich diese Warnung nicht beachten ?
2)
Wenn der Compiler die Zeile
MyFenster *pmyfObj;
abscannt, dann steht dort der unbekannte Bezeichner MyFenster
Der Compiler würde deshalb eine Fehlermeldung bringen, wenn nicht am
Anfang die Deklaration
class MyFenster;
gemacht wird, in der dem Compiler der Bezeichner MyFenster bekannt
gemacht wird.
Das habe ich so weit verstanden, aber:
wenn ich in dem Programm (siehe unten) vor der der Klasse MyWanze die
Klasse MyFenster bringen würde und dann aber dafür dies dem Compiler
durch die folgenden Deklarationen mitteile:
(***)
class MyFenster;
class MyWanze;
bekomme ich viele Fehlermeldungen.
Warum ist das so (ich habe doch durch die Dekarationen (***) die
Bezeichner bekannt gemacht), bzw. wie kann man das vermeiden ?
Das folgende ergibt also Fehlermeldungen:
.......
class MyFenster;
class MyWanze;
class MyFenster{
public:
int myZahl;
MyWanze mywObj;
MyFenster(int z);
};
class MyWanze{
public:
MyFenster *pmyfObj;
MyWanze(MyFenster *f);
void klickAufruf();
};
.......
3)
Frage:
Nennt man
class MyFenster;
eine Deklaration
und
class MyFenster{
public:
int myZahl;
MyWanze mywObj;
MyFenster(int z);
};
eine Definition oder wie heißt das richtig ?
-------------------------------------------------------------------------------------------
Hier das funktionierende Programm:
-------------------------------------------------------------------------------------------
PS:
Dies ist ein Demo-Programm, deshalb habe ich auch die Datenmember
statt private public und statt cout printf benutzt.
--------------- Programm-Beginn --------------------------
#include "stdafx.h"
#include <stdio.h>
class MyFenster;
class MyWanze{
public:
MyFenster *pmyfObj;
MyWanze(MyFenster *f);
void klickAufruf();
};
class MyFenster{
public:
int myZahl;
MyWanze mywObj;
MyFenster(int z);
};
MyFenster::MyFenster(int z):mywObj(this){
myZahl = z;
}
MyWanze::MyWanze(MyFenster *f){
pmyfObj=f;
}
void MyWanze::klickAufruf(){
(pmyfObj->myZahl)++;
printf("%d\n", pmyfObj->myZahl);
}
int main(){
MyFenster myfObj(13);
myfObj.mywObj.klickAufruf();
myfObj.mywObj.klickAufruf();
myfObj.mywObj.klickAufruf();
return 0;
}
--------------- Programm-Ende --------------------------
--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de |
|
| Back to top |
|
 |
Marcel Müller Guest
|
Posted: Sun Mar 26, 2006 1:06 am Post subject: Re: Einfache Frage zu this |
|
|
Hallo,
Ernst Baumann schrieb:
[...]
| Quote: | Das Programm funktioniert einwandfrei, nur bekomme ich mit meinem
MS VC++ Vers. 6.0 die Warnung:
"warning C4355: this' : wird in Initialisierungslisten fuer
Basisklasse verwendet"
|
Das Thema wurde gerade mal 5 Threads weiter oben durchgekaut.
"this in Initialisierungsliste"
Marcel
--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de |
|
| Back to top |
|
 |
|
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum
|
|