Avatar billede cpphp Nybegynder
12. april 2002 - 06:25 Der er 3 kommentarer og
3 løsninger

function pointer

Hej...

jeg har hørt om fundtions pointere et eller andet sted, kan ikke huske hvor, og jeg så spørge: hvordan bruger man dem.
Hvoirdan gør jeg fx. følgende;
en funktion1's parameter er en funktions pointer og fundtion1 kalder funcrions pointeren med en streng som parameter

Jeg håber I forstår hvad jeg taler om...
Avatar billede laffe Nybegynder
12. april 2002 - 08:29 #1
Mener du en Pointer til en Funkction ?
Avatar billede erikjacobsen Ekspert
12. april 2002 - 09:13 #2
Det er nok noget i denne stil:

#include <stdio.h>
#include <string.h>

void f(  int g(char *) ) {
  printf("resultat: %d\n",g("hurlumhejhuset"));
  printf("resultat: %d\n",g("eksperten.dk"));
}

int k(char* h) {
  return strlen(h);
}

int main(int argc, char *argv[]) {
    f(k);
}
Avatar billede chries Nybegynder
12. april 2002 - 09:18 #3
Avatar billede soepro Nybegynder
12. april 2002 - 09:47 #4
En pointer til en given funktion, skal blot defineres med samme syntaks som den funktion den skal gemme adressen på:

void voidFunc(void);
void (*ptrVoidFunc)(void) = voidFunc;
int  intFunc(int a);
int  (*ptrIntFunc)(int) = intFunc;

osv. Nu kan du bruge voidFunc() og ptrVoidFunc() frit ombytteligt og intFunc(x) og ptrIntFunc(x) frit ombytteligt.
Avatar billede cpphp Nybegynder
12. april 2002 - 16:41 #5
Hvarfor for jeg denne fejl; error C2664 : 'test::test(void *(__cdecl *)(char *))' : cannot convert parameter 1 from 'void (char*)' to 'void *(__cdecl *)(char *)
... Når jeg prøver at compile følgende kode:

class test
{
public:
    test(void* f(char*)) : m_f(f) { }
    void exe() { m_f("test"); }
private:
    void* (*m_f)(char*);
};

class test2
{
public:
    test2() : m_test(0) { }
    void print() { m_test = new test(dis); }
    void dis (char* str) { cout << str << endl; }
private:
    test* m_test;
};

int main(int argc, char *argv[])
{
  test2 *t = new test2();
    t->print ();
    return 0;
}
Avatar billede cpphp Nybegynder
12. april 2002 - 16:43 #6
hvorfor får jeg denne fejl: i:\Documents and Settings\Simon B. Terkildsen\Dokumenter\test\test.cpp(22): error C2664: 'test::test(void *(__cdecl *)(char *))' : cannot convert parameter 1 from 'void (char *)' to 'void *(__cdecl *)(char *)'
... Når jeg compilere følgende kode.

class test
{
public:
    test(void* f(char*)) : m_f(f) { }
    void exe() { m_f("test"); }
private:
    void* (*m_f)(char*);
};

class test2
{
public:
    test2() : m_test(0) { }
    void print() { m_test = new test(dis); }
    void dis (char* str) { cout << str << endl; }
private:
    test* m_test;
};

int main(int argc, char *argv[])
{
    test2 *t = new test2();
    t->print ();
    return 0;
}
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