2010-11-28 25 views
-2

J'espère que cela a du sens pour vous, je suis confus. laissez-moi savoir s'il y a un moyen plus simple:C++ appelle la fonction de classe de la fonction d'une autre classe

double A::a(double(b::*bb)()) 
{ 
    b.init(); 
    return (b->*bb)(); 
} 

void A::run(); 
{ 
    cout<< a(b.b1); 
    cout<< a(b.b2); 
} 

class A 
{ 
    B b; 
    void run(); 
    double a(double(b::*bb)()); 
}; 

class B 
{ 
    void init(); 
    double b1(); 
    double b2(); 
}; 
+4

Quelle est exactement votre question? – EboMike

+2

cela n'a pas de sens .. ce qui est 'bb'? Recevez-vous des messages d'erreur? Pouvez-vous les poster? – Default

+0

Qu'essayez-vous réellement d'accomplir en faisant ceci? –

Répondre

1

Cela n'a aucun sens. Cela a du sens cependant:

class B // <- class B definition comes first 
{ 
    void init(); 
    double b1(); 
    double b2(); 
}; 

class A 
{ 
    B b; 
    void run(); 
    double a(double(B::*bb)()); // <- B instead of b 
}; 

double A::a(double(B::*bb)()) // <- B instead of b 
{ 
    b.init(); 
    return (b->*bb)(); 
} 

void A::run() // <- you can't put semicolon here 
{ 
    cout<< a(&B::b1); // <- you want to pass the address of a member. 
    cout<< a(&B::b2); // <- you want to pass the address of a member. 
} 

Maintenant, il me semble plus logique.

0

Ce:

double a(double(b::*bb)()); 

devrait être:

double a(double(B::*bb)()); 

C'est, bb doit être déclarée en tant que pointeur vers une fonction membre dans la classe B, pas dans l'objet b (qui est une instance, pas un type lui-même, ne peut donc pas faire partie d'un type).