Bonjour, j'ai un soucis avec GCC 4.7.2 (windows)

Je crée une class A (avec un attribut) et une class B (qui hérite de la class A, avec une fonction virtual)

Je crée un objet B, et un pointeur de méthode d'objet B que je converti en pointeur de méthode A

Et quand j'appelle ce pointeur, crash

Je vous donne le code :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
// Class A
struct A
{
    int m_value;
};
 
// Class B
struct B : public A
{
    virtual void foo() { std::cout << "Hello World!" << std::endl; }
};
 
// Main
int main()
{
    // Création de l'objet
    B object;
 
    // Pointeur de méthode d'objet B
    std::function<void (B*)>  func_t = &B::foo;
    // Pointeur de méthode d'objet A (convertion de B en A)
    std::function<void (A*)>* func   = reinterpret_cast< std::function<void (A*)>* >( &func_t );
 
    // Appel de la fonction
    (*func)(&object);
 
    getwchar();
    return 0;
}
Alors, si je supprime l'attribut de la class A, plus de problème... Ou encore, si j'enlève le virtual à ma fonction, plus de problème non plus...
Mais bon, cela ne m'arrange absolument pas !

J'aimerais donc savoir si vous avez des problèmes avec votre compilo et le qu'elle vous utilisez

Et si possible comment régler ce problème ?

En réalité, j'ai un tableau de pointeur de méthode d'objet qui hérite de la class A et ma class A doit obligatoirement contenir un attribut (histoire de ne pas changer la conception)

Voilà, je vous remercie de votre aide (y) !