webForumDet fria alternativet

method pointers

4 svar · 338 visningar · startad av fnolis

fnolisMedlem sedan sep. 200162 inlägg
#1

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
#2

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
#3

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
#4

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
#5

Aha! thanx!

... hatar när man fastnar med sådanna problem...

Genererad på 515 ms · cache AV · v20260730165559-full.f96bc7eb