Avatar billede hurra Novice
08. september 2005 - 15:23 Der er 4 kommentarer og
1 løsning

Endnu en pointer til finktion spørgsmål

Det minder meget om rigtigt mange andre inlæg, men jeg har ikke fundet et svar jeg kan bruge endnu.

Ganske enkelt skal jeg bruge en pointer til en funktion som ligger i samme klasse som jeg vil kalde den fra. Det lyder let hva ?

Her er lidt kode fra min header:
class TForm1 : public TForm
{
  int(TForm1::*fcptr)(int a);
  int fc(int a);
};

og fra sovsen:
int TForm1::fc(int a)
{
  return a+4;
}

void __fastcall TForm1::Button1Click(TObject *Sender)
{
  f = &fc;
  int a = f(1);
}

Hvad er der galt her ?
Avatar billede hurra Novice
08. september 2005 - 15:39 #1
Vola... Fra headeren:
class TForm1 : public TForm
{
  int(TForm1::*f)(int a);
  int fc(int a);
};

og cpp filen:
int TForm1::fc(int a)
{
  return a+4;
}

void __fastcall TForm1::Button1Click(TObject *Sender)
{
  f = &TForm1::fc;
  Form1->Caption = fc(1);
}
Avatar billede hurra Novice
08. september 2005 - 15:42 #2
DOOOOOHHHHHH!!!!!!!!!! Jeg blev bare så glad for at den kunne kombilere at jeg ikke lige så ordentligt efter. Jeg genåbner lige igen.... (jeg kalder funktionen direkte uden om pointeen i det løsnings forslag).
Avatar billede hurra Novice
08. september 2005 - 15:44 #3
Avatar billede arne_v Ekspert
08. september 2005 - 18:50 #4
det kan du ikke umiddelbart fordi

en funktion er grundliggende noget kode

men en (ikke static) metode er grundliggende et objekt og noget kode

i nogle tilfælde kan du lave en dispatcher funktion
Avatar billede bertelbrander Novice
08. september 2005 - 19:53 #5
Måske noget i stil med:

#include <iostream>

class MyClass
{
public:
  MyClass()
  {
    FPtr = &MyClass::MyFunc1;
  }

  void MyFunc1()
  {
    std::cout << "Func1" << std::endl;
  }
  void MyFunc2()
  {
    std::cout << "Func2" << std::endl;
  }
  typedef void (MyClass:: *FPtrType )();
  FPtrType FPtr;

  void Do()
  {
    (this->*FPtr)();
    FPtr = &MyClass::MyFunc2;
  }

};

int main()
{
  MyClass My;
  My.Do();
  My.Do();
}
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