fnolisMedlem sedan sep. 200162 inlägg
Varför får jag inte använda min methodpekare?
<font size="1" face="Verdana, Arial, Helvetica, sans-serif">Kod:<font size="1" face="Verdana, Arial, Helvetica, sans-serif" color="#666600">
#include <iostream>
using namespace std;
class A
{
public:
void function( void )
{
cout << "A::function( void )" << endl;
}
};
class B : public A
{
void (A::*funcPnt)( void );
public:
B( void )
{
funcPnt = &A::function;
}
void UseFunctionPointer( void )
{
cout \<\< "B::UseFuntionPointer" \<\< endl;
// FUNKA DÅ! grrr....
//funcPnt();
}
};
int main( int argc, char* argv[] )
{
B x;
x.UseFunctionPointer();
return 0;
}
Om jag försöker så får jag:
error C2064: term does not evaluate to a function
RezaMedlem sedan feb. 2001111 inlägg
Prova med :
<font size="1" face="Verdana, Arial, Helvetica, sans-serif">Kod:<font size="1" face="Verdana, Arial, Helvetica, sans-serif" color="#666600">
void UseFunctionPointer( void )
{
cout << "B::UseFuntionPointer" << endl;
// FUNKA DÅ! grrr....
(this->*funcPnt)();
}
När det gäller funktions pekare till medlemsfunktioner, så måste man använda sig av * operatorn för att referera till funktions pekaren. Jag har ingen bra förklaring till varför det är så, men en gissning är att lösa namnkonflikter som kan uppstå i samband med användandet av funktions pekare till medlemsfunktioner.
------------------
Reza K
fnolisMedlem sedan sep. 200162 inlägg
Tackar tackar! Men det funkade inte riktigt... man var tvyngen att ha en pekare till classen som metoden tillhör plus din syntax
[KOD]
void UseFunctionPointer( void )
{
A* ap;
cout << "B::UseFuntionPointer" << endl;
(ap->*funcPnt)();
}
[KOD]
[Redigerat av fnolis den 08 jan 2002]
RezaMedlem sedan feb. 2001111 inlägg
Anledningen till att det inte fungerade med this-pekaren, var förmodligen att du slutade ärva från klassen A, och då är du tvungen att ha en objekt av klassen.
Men om du ärver från klassen A (som du gjorde i din första kod) kommer det jag skrev (this-pekaren) att fungera!
------------------
Reza K
fnolisMedlem sedan sep. 200162 inlägg
Aha! thanx!
... hatar när man fastnar med sådanna problem...