Je reçois une erreur de segmentation chaque fois que j'essaie d'accéder à une fonction virtuelle. Le code est fondamentalement comme ceci:Fonction virtuelle invoquant une erreur de segmentation
class Super {
public:
Super() { cout << "Ctor Super" << endl; }
virtual void test() = 0;
};
class Sub : public Super {
public:
Sub() { cout << "Ctor Sub" << endl; }
void test() { cout << "Test in Sub" << endl; }
};
void main()
{
Super* s = new Sub;
s->test(); // Segmentation fault So I tried the one below
Sub* s1 = new Sub;
s1->test(); //Still segmentation fault
Sub s2;
s2.test(); // Works fine BUT
Super *s3 = &s2;
s3->test(); // segmentation fault and EVEN
Sub *s4 = &s2;
s4->test(); //segmentation fault
}
J'ai essayé presque tout ce que je sais des fonctions virtuelles et cela ne fonctionne pas. C'est en fait une partie d'un plus gros programme donc ça pourrait avoir un problème là-bas mais dès que j'enlève la fonction virtuelle ou que j'arrête de la rendre virtuelle cela fonctionne. Des idées?
Existe-t-il un outil ou un moyen d'examiner le vtable?
Le code se construit et fonctionne bien ici. –
yups il devrait, mais ce n'est pas sur ma machine. Je l'utilise sur une machine PowerPC LYnxOS. Pouvez-vous penser à une situation où il ne devrait pas fonctionner. –