共享库中的抽象类

时间:2010-04-19 00:24:59

标签: c++ shared-libraries abstract-class linker-errors pure-virtual

我有一个普通的抽象类,它有几个纯虚方法。类本身是共享库的一部分。共享库本身的编译是可以的。但是当库链接到另一个程序时,该程序具有从共享库中的抽象类派生的另一个类并定义纯虚方法,我得到以下链接器错误。

我这样编译..:

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

链接器错误是:

  

libsomename.so:对“AbstractClass :: method()”

的未定义引用

这就像抽象类无法访问其纯虚方法一样,但我不会尝试在库中的任何位置创建抽象类的任何实例。

可能是什么问题?

1 个答案:

答案 0 :(得分:1)

定义抽象类时,必须使所有函数都是虚函数,并以= 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;
};

确保你这样做,它应该有用。