Абстрактные классы в общей библиотеке - PullRequest
2 голосов
/ 19 апреля 2010

У меня есть обычный абстрактный класс, в котором есть пара чисто виртуальных методов. Сам класс является частью общей библиотеки. Компиляция самой разделяемой библиотеки в порядке. Но когда библиотека связана с другой программой, у которой есть другой класс, производный от абстрактного в общей библиотеке и определяющий чисто виртуальные методы, я получаю следующую ошибку компоновщика.

Я компилирую вот так ..:

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

Ошибка компоновщика:

libsomename.so: неопределенная ссылка на `AbstractClass :: method () '

Похоже, абстрактный класс не может получить доступ к своим чисто виртуальным методам, но я не пытаюсь создать экземпляр абстрактного класса где-нибудь в библиотеке.

В чем может быть проблема?

1 Ответ

1 голос
/ 19 апреля 2010

При определении абстрактных классов вы должны сделать все функции виртуальными, а также завершиться с = 0, т.е.:

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;
};

Убедитесь, что вы делаете это, и оно должно работать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...