[Résolu] pure virtual method called

pure virtual method called [Résolu] - C++ - Programmation

Marsh Posté le 29-12-2008 à 18:48:03    

Salut,
j'ai un projet (Linux) comportant ces fichiers binaires :
- libmylib1.so
- libmylib2.so lié à libmylib1.so
- test1 lié à libmylib2.so
- test2 lié à libmylib2.so
 
Dans libmylib1.so, je définis :

class A {
 virtual bool Start() = 0;
};
 
class C : public A, public B { // Avec B ne définissant pas de méthode Start()
 virtual bool Start();
};


 
Dans libmylib2.so, je définis (mais ne redéfinis pas la méthode Start) :

class D : public C {
};
 
bool StartMyProject() {
 D* pMyD = new D();
 return pMyD->Start();
}


 
# test1 marche bien, appelle bien lors de l'appel de StartMyProject()
# Mais avec test2 j'ai le droit à l'erreur ci-dessous lorque j'appelle la méthode pMyD->Start() dans StartMyProject() :

pure virtual method called
terminate called without an active exception
Abandon


Pour test1 et test2, la librairie libmylib2.so est spécifié durant le link.
 
Resultat des dépendances :


olivier@olivier:~/Project/bin$ ldd test2
        linux-gate.so.1 =>  (0xffffe000)
        libmylib2.so => /usr/local/lib/libmylib2.so (0xb7ee6000)
        libstdc++.so.6 => /usr/lib/libstdc++.so.6 (0xb7dfb000)
        libm.so.6 => /lib/i686/cmov/libm.so.6 (0xb7dd6000)
        libgcc_s.so.1 => /lib/libgcc_s.so.1 (0xb7dcb000)
        libc.so.6 => /lib/i686/cmov/libc.so.6 (0xb7c7e000)
        libmylib1.so => /usr/local/lib/libmylib1.so (0xb7c57000)
        /lib/ld-linux.so.2 (0xb7f22000)
        libdl.so.2 => /lib/i686/cmov/libdl.so.2 (0xb7c52000)
        libicui18n.so.38 => /usr/lib/libicui18n.so.38 (0xb7af7000)
        libicuuc.so.38 => /usr/lib/libicuuc.so.38 (0xb79d6000)
        libicudata.so.38 => /usr/lib/libicudata.so.38 (0xb6eff000)
        libpthread.so.0 => /lib/i686/cmov/libpthread.so.0 (0xb6ee7000)
 
olivier@olivier:~/Project/bin$ ldd cmsclient_test
        linux-gate.so.1 =>  (0xffffe000)
        libmylib2.so => /usr/local/lib/libmylib2.so (0xb7f0c000)
        libstdc++.so.6 => /usr/lib/libstdc++.so.6 (0xb7e21000)
        libm.so.6 => /lib/i686/cmov/libm.so.6 (0xb7dfc000)
        libgcc_s.so.1 => /lib/libgcc_s.so.1 (0xb7df1000)
        libc.so.6 => /lib/i686/cmov/libc.so.6 (0xb7ca4000)
        libicuuc.so.38 => /usr/lib/libicuuc.so.38 (0xb7b83000)
        libmylib1.so => /usr/local/lib/libmylib1.so (0xb7b5b000)
        /lib/ld-linux.so.2 (0xb7f48000)
        libicudata.so.38 => /usr/lib/libicudata.so.38 (0xb7084000)
        libdl.so.2 => /lib/i686/cmov/libdl.so.2 (0xb7080000)
        libicui18n.so.38 => /usr/lib/libicui18n.so.38 (0xb6f25000)
        libpthread.so.0 => /lib/i686/cmov/libpthread.so.0 (0xb6f0d000)
 
olivier@olivier:~/Project/lib$ nm libmylib2.so | grep Start
         U _ZN12C5StartEv
 
olivier@olivier:~/Project/lib$ nm libmylib1.so | grep Start
0001dab4 T _ZN12C5StartEv


 
Pas de warning lorsque je compile tous cela avec '-Wall' ...


Message édité par Olivier51 le 29-12-2008 à 22:19:51
Reply

Marsh Posté le 29-12-2008 à 18:48:03   

Reply

Marsh Posté le 29-12-2008 à 21:45:34    

Ah oui, j'ai oublié de préciser, mais j'ai également testé avec/sans les options '-g' et '-lefence' et ça change rien ...

Reply

Marsh Posté le 29-12-2008 à 22:19:13    

... Pardon du dérangement, j'ai trouvé http://forum-images.hardware.fr/images/perso/cerveau%20afrojojo.gif, petit problème de namespace; j'avais deux classes qui portaient le meme nom avec bien sur une des classes qui n'implémentait pas ce qu'il fallait ...
 
http://forum-images.hardware.fr/images/perso/dawa_neowen.gif

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed