/ Forside / Teknologi / Udvikling / C/C++ / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
C/C++
#NavnPoint
BertelBra.. 2425
pmbruun 695
Master_of.. 501
jdjespers.. 500
kyllekylle 500
Bech_bb 500
scootergr.. 300
gibson 300
molokyle 287
10  strarup 270
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



Søg
Reklame
Statistik
Spørgsmål : 177500
Tips : 31968
Nyheder : 719565
Indlæg : 6408509
Brugere : 218887

Månedens bedste
Årets bedste
Sidste års bedste