• Liebe User, bitte beachtet folgendes Thema: Was im Forum passiert, bleibt im Forum! Danke!
  • Hallo Gemeinde! Das Problem leidet zurzeit unter technischen Problemen. Wir sind da dran, aber das Zeitkontingent ist begrenzt. In der Zwischenzeit dürfte den meisten aufgefallen sein, dass das Erstellen von Posts funktioniert, auch wenn das Forum erstmal eine Fehlermeldung wirft. Um unseren Löschaufwand zu minimieren, bitten wir euch darum, nicht mehrmals auf 'Post Reply' zu klicken, da das zur Mehrfachposts führt. Grußworte.

Nochmal C++: Pointer auf Funktion

Mitglied seit
09.11.2002
Beiträge
880
Reaktionen
0
Ahh, hallo! Ich habe da nochmal eine Frage:
Ich habe innerhalb einer Klasse 2 Funktionen definiert (private, und nicht-static!), und ich möchte zur Laufzeit die richtige auswählen, also brauche ich einen Zeiger auf eine Funktion. Wie mache ich das?

Code:
class Simplex
{
...
double (Simplex::*fkt)(int, double *); // Zeiger auf die Funktion
double GaussLorentzChiSqr(int n, double *params); // eine der in Frage kommenden Funktionen
...
};

Simplex::Simplex()
{
// Im Constructor wird die richtige Funktion ausgewählt...
fkt = &Simplex::GaussLorentzChiSqr;
}

void Simplex::downhill()
{
// ... und in dieser Funktion damit gearbeitet
double d = fkt(dumy1, dumy2);
}

Fehlermeldung, die ich nicht verstehe:
simplex.cpp:62: error: must use ‘.*’ or ‘->*’ to call pointer-to-member function in ‘((Simplex*)this)->Simplex::fkt (...)’

Diese Meldung bezieht sich auf Simplex::downhill(), d.h. vorher in der Deklaration und im Constructor ist alles richtig gemacht, nehme ich an. Wie rufe ich also eine Funktion innerhalb einer Klasse auf, von der ich nur einen Pointer habe?
Google Suche nach dieser Fehlermeldung bringt leider auch nicht viel :-(

Danke sehr!

Edit: Im Konstruktor "fkt = &Simplex::GaussLorentzChiSqr;" anstelle von "fkt = &GaussLorentzChiSqr;" geschrieben.
 

killerchicken_inaktiv

Guest
Probier mal im Konstruktor statt fkt = &GaussLorentzChiSqr; die Klasse mit anzugeben, also

fkt = &Simplex::GaussLorentzChiSqr;

das macht die ganze Sache schonmal etwas sauberer.

Dann, in Simplex::Downhill, ruf das ganze mal so auf:

double d = this.*fkt(dumy1, dumy2);
 
Mitglied seit
09.11.2002
Beiträge
880
Reaktionen
0
Danke, habe ich aber schon, sorry, war eine veraltete Version des Codes die ich gepostet habe. Schon korrigiert.
 

killerchicken_inaktiv

Guest
postest du nochmal den aktuellen Source bitte?
 
Mitglied seit
09.11.2002
Beiträge
880
Reaktionen
0
Ist genau der im obersten Posting.

Und ich habe schon diverse Kombinationen von
double d = (Simplex*)this.*fkt()
double d = (Simplex*)this->*fkt()
double d = *this->*fkt()
double d = *this.*fkt()
und so weiter durchprobiert. Die Fehlermeldung ist immer die selbe, obwohl zB double d = *this->*fkt() definitiv falsch sein müsste, da *this ja kein Pointer ist und ich also nicht -> verwenden dürfte, oder?
 
Mitglied seit
21.07.2002
Beiträge
545
Reaktionen
0
double d = (this->*fkt)(x, y);
dürfte richtig sein.
 
Oben