Avatar billede cyt Nybegynder
31. august 2001 - 14:27 Der er 9 kommentarer og
1 løsning

Returnering af pointer til funktion

Davs...

Jeg har en private i min klasse:

    void (*Entry)(...);

Og denne private ville jeg egentlig gerne have returneret v.hj.a. en public funktion.

Jeg skal altså bruge en funktion, der returnerer en pointer til en funktion med et ikke givet antal variable.

Hvordan gør jeg det?

Ting, der ikke virker:

void()(...) *GetEntry(); // syntax error: \'void(\'
void(*)(...) GetEntry(); // syntax error: \')\'
void(*GetEntry)(...) (); // function returns function

osv... :-(

Avatar billede wisen Nybegynder
31. august 2001 - 14:34 #1
Du skal caste den til et eller andet, fx. int.

void*  vp;

int GetPointer()
{
return (int*) vp;
}

/wisen
Avatar billede cyt Nybegynder
31. august 2001 - 14:39 #2
Spørgsmålet var ikke, hvordan jeg implementerede den, men hvordan jeg deklarerer den i min klasse.

I funktionen skal jeg bare skrive:

return Entry;

Iøvrigt er forklaringen på den sidste fejlbesked:

A function cannot return a function - a function can return a ->pointer<- to a function.

Men ligemeget, hvor jeg sætter flere stjerner får jeg andre compiler fejl.
Avatar billede cyt Nybegynder
31. august 2001 - 14:41 #3
Desuden caster du til en int pointer, men skal returnere en int.

Et råd: Test den kode af, du poster - medminder du er bombesikker på, at den er rigtig. Eller skrive i det mindste, at du ikke har testet det :-)
Avatar billede wisen Nybegynder
31. august 2001 - 14:42 #4
Hvad så med det her :

void* pv;

void Test(void** ppv)
{
    ppv = pv*;
}

void* Getpv;
Test(Getpv);

Avatar billede wisen Nybegynder
31. august 2001 - 14:43 #5
Ja, int\'en var en slåfejl :)
Avatar billede wisen Nybegynder
31. august 2001 - 14:45 #6
Fuc* det går ikke særligt godt :

void Test(void** ppv)
{
    ppv = &pv;
}

Avatar billede wisen Nybegynder
31. august 2001 - 14:48 #7
Det er dælme fredag, nu går jeg sgu hjem; bare glem det :)
Avatar billede wisen Nybegynder
02. september 2001 - 12:29 #8
Måske kan du bruge datatypen \"FARPROC\" istedet for en void-pointer og derved undgå alle disse problemer :)

Derudover kan du jo også bare lave din variabel være public; hvis du alligevel udleverer pointeren, er der jo ingen grund til at indkapsle den, vel...
Avatar billede cyt Nybegynder
03. september 2001 - 09:36 #9
Jeg har fået svaret i et andet messageboard:

    void (*GetEntry())(...);

Og desuden er der da en meget god grund til ikke at lave den public. Hvis man gør det, kan andre klasser skrive til den, hvilket ikke er tilfældet med denne konstruktion.

En anden ting er så, at jeg jo bare kunne have returneret en void pointer, da jeg jo alligevel skal caste bagefter.

Avatar billede wisen Nybegynder
03. september 2001 - 10:34 #10
Hmm, ok....
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester