|
| Problem med funktioner Fra : Klaus Petersen |
Dato : 07-11-02 02:34 |
|
Hej NG.
Jeg har et problem, som jeg ikke rigtig kan gennemskue.
Betragt følgende kode:
typedef int ( *test ) ();
class testclass {
public:
int lokalclass () {
printf ("metode\n");
return 3;
};
};
test funk;
int lokal () {
printf ("lokal\n");
return 5;
};
int main(int argc, char* argv[])
{
testclass *fejl = new testclass;
funk = lokal; // denne her er i orden
funk = fejl->lokalclass; // dette her giver fejl
funk();
return 0;
}
-----
Det, jeg gerne vil opnå er, at gemme en pointer til en funktion og være i
stand til at kalde den udfra den gemte pointer.
Virker også fint, når funktionen ligger uden for en klasse, men ikke når den
ligger inde i een.
Så får jeg en "error C2440: '=' : cannot convert from 'int (__thiscall
testclass::*)(void)' to 'int (__cdecl *)(void)'".
Hvad er problemet?
Hvordan løses det bedst?
Kan den f.eks. type castes?
Klaus.
| |
Rolf Kristensen (07-11-2002)
| Kommentar Fra : Rolf Kristensen |
Dato : 07-11-02 07:33 |
|
"Klaus Petersen" <spektual@hotmail.com> wrote in message
news:aqcftd$le8$1@sunsite.dk...
> Hej NG.
>
> Hvad er problemet?
> Hvordan løses det bedst?
> Kan den f.eks. type castes?
Kan kun anbefale du læser :
http://www.function-pointer.org/
| |
Torben W. Hansen (07-11-2002)
| Kommentar Fra : Torben W. Hansen |
Dato : 07-11-02 11:07 |
|
"Klaus Petersen" <spektual@hotmail.com> skrev i en meddelelse
news:aqcftd$le8$1@sunsite.dk...
Hvad sker der hvis du udskifter sætningen:
funk = fejl->lokalclass; // dette her giver fejl
med :
funk = fejl.lokalclass; // dette her giver fejl
???
Med venlig hilsen
Torben W. Hansen
| |
Klaus Petersen (07-11-2002)
| Kommentar Fra : Klaus Petersen |
Dato : 07-11-02 18:47 |
|
> Hvad sker der hvis du udskifter sætningen:
> funk = fejl->lokalclass; // dette her giver fejl
>
> med :
> funk = fejl.lokalclass; // dette her giver fejl
error C2228: left of '.lokalclass' must have class/struct/union type
| |
Bertel K. Brander (07-11-2002)
| Kommentar Fra : Bertel K. Brander |
Dato : 07-11-02 20:13 |
|
En løsning kunne være at lave localclass() static, dvs. skrive:
static int localclass() {
....
Derved kan dit program kompilere og køre, men det vil medføre
at du ikke kan få adgang til ikke-static medlemmer af din class.
Problemet kan ikke løses med en typecast.
/bertel
Klaus Petersen wrote:
> Hej NG.
>
> Jeg har et problem, som jeg ikke rigtig kan gennemskue.
>
> Betragt følgende kode:
>
> typedef int ( *test ) ();
>
> class testclass {
>
> public:
>
> int lokalclass () {
> printf ("metode\n");
> return 3;
> };
>
> };
>
> test funk;
>
> int lokal () {
> printf ("lokal\n");
> return 5;
> };
>
> int main(int argc, char* argv[])
> {
> testclass *fejl = new testclass;
>
> funk = lokal; // denne her er i orden
> funk = fejl->lokalclass; // dette her giver fejl
>
> funk();
> return 0;
> }
>
> -----
>
> Det, jeg gerne vil opnå er, at gemme en pointer til en funktion og være i
> stand til at kalde den udfra den gemte pointer.
>
> Virker også fint, når funktionen ligger uden for en klasse, men ikke når den
> ligger inde i een.
>
> Så får jeg en "error C2440: '=' : cannot convert from 'int (__thiscall
> testclass::*)(void)' to 'int (__cdecl *)(void)'".
>
> Hvad er problemet?
> Hvordan løses det bedst?
> Kan den f.eks. type castes?
>
> Klaus.
>
>
>
| |
Jonas Meyer Rasmusse~ (08-11-2002)
| Kommentar Fra : Jonas Meyer Rasmusse~ |
Dato : 08-11-02 11:41 |
|
| |
|
|