pure virtual method called [Résolu] - C++ - Programmation
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 ...
Marsh Posté le 29-12-2008 à 22:19:13
... Pardon du dérangement, j'ai trouvé , 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 ...
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