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 :
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...
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; }
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) !





Répondre avec citation









, à la place d'un problème sur une pseudo-solution.
. Le typage est justement là pour apporter une sécurité sur ce que tu fais. Alors bien entendu quand tu dis au compilateur "laisse moi faire ce que je veux", il te laisse faire, pas pour autant que c'est correct.

Partager