2

J'ai une classe abstraite ordinaire qui possède quelques méthodes virtuelles pures. La classe elle-même fait partie de la bibliothèque partagée. La compilation de la bibliothèque partagée elle-même est OK. Mais quand la bibliothèque est liée à un autre programme qui a une autre classe dérivant de l'abstraite dans la bibliothèque partagée et définissant les méthodes virtuelles pures, j'obtiens l'erreur de lien suivante.Classes abstraites dans la bibliothèque partagée

Je compilez comme ça ..:

g++ -I../path/to/the/library main.cpp derived.cpp -L../path/to/the/library -lsomename -o shared 

L'erreur de liaison est:

libsomename.so: undefined reference to `AbstractClass :: méthode() »

C'est comme si la classe abstraite ne pouvait pas accéder à ses méthodes virtuelles pures, mais je n'essaie pas de faire n'importe quelle instance de la classe abstraite n'importe où dans la bibliothèque.

Quel pourrait être le problème?

Répondre

1

Lors de la définition des classes abstraites vous devez faire toutes les fonctions virtuelles et fin aussi avec = 0 i.e.:

class DPReporterI 
{ 
public: 
    virtual uint32 getProviderCount()=0; 
    virtual uint32 getProviderId(uint32 index)=0; 

    virtual uint32 getLastRate(uint32 id)=0; 
    virtual void getName(uint32 id, char* buff, uint32 size)=0; 
}; 

Assurez-vous de le faire et cela devrait fonctionner.

+0

tout fait de cette façon depuis le début ... – JTom

+1

pouvez-vous poster le code qui vous donne l'erreur que s'il vous plaît. – Lodle