(wskaźnik do funkcji zwracającej wskaźnik) jako parametr funkcji...

0

Witam.

Mam problem z wywołaniem funkcji, której parametrem jest wskaźnik do funkcji zwracającej wskaźnik na obiekt klasy.

Klasa pierwsza:

class matrixCell{};

Funkcje klasy drugiej:

class mainMatrix
{
matrixCell* giveCellUsingNorhtWest();
matrixCell* giveCellUsingMinimalCost();
matrixCell* giveCellUsingVogl();
matrixCell* giveCellUsingRussel();
bool calculateFirstFeasibleSolution(matrixCell* (*giveCell)(), bool costam);
};

przy próbie wywołania:

calculateFirstFeasibleSolution(giveCellUsingNorhtWest(), false);

otrzymuje błąd:
Error 1 error C2664: 'generalMatrix::calculateFirstFeasibleSolution' : cannot convert parameter 1 from 'matrixCell *' to 'matrixCell *(__clrcall *)(void)'

wg schematu: zwracany_typ (* nazwa_wskaźnika )( [ parametry ] ); powinno to działać...
//pracuję na Visual Studio '08 jeśli ma to znaczenie

Proszę o pomoc,
Pozdrawiam

0
class Test
  {
   public:
   double x,y;
   Test(double x,double y) { Test::x=x; Test::y=y; }
   double avg() { return (x+y)/2; }
  };
double (Test::*wmz)(); // deklaracja wskaźnika na metodę

wmz=&Test::avg; // inicjalizacja wskaźnika na metodę
Test t(3,4),*p=&t;
(t.*wmz)(); // wywołanie metody przez wskaźnik na rzecz obiektu
(p->*wmz)(); // wywołanie metody przez wskaźnik na rzecz wskaźnika
0

Dzięki za odpowiedź.
Jednak nie bardzo rozumiem jak się to ma do mojego problemu.
Jak by wyglądała sytuacja, gdyby chcieć wskaźnik na metodę wmz umiścić w parametrze innej funkcji - i dodatkowo żeby avg zwracała wskaźnik?

1
#include <iostream>
using namespace std;

class matrixCell {};

class mainMatrix
  {
   public:
   matrixCell* giveCellUsingNorhtWest() { return 0; }
   matrixCell* giveCellUsingMinimalCost() { return 0; }
   matrixCell* giveCellUsingVogl() { return 0; }
   matrixCell* giveCellUsingRussel() { return 0; }
   bool calculateFirstFeasibleSolution(matrixCell *(mainMatrix::*giveCell)(),bool costam)
     {
      matrixCell *m=(this->*giveCell)();
     }
  };

int main()
  {
   mainMatrix m;
   m.calculateFirstFeasibleSolution(&mainMatrix::giveCellUsingVogl,false);
   return 0;
  }
0

Dzięki wielkie, teraz działa :)
Chociaż powiem szczerze że nie bardzo rozumiem dlaczego tak, ale widocznie muszę uzupełnić wiedzę ze wskaźników ;)

1 użytkowników online, w tym zalogowanych: 0, gości: 1