我有一个普通的抽象类,它有几个纯虚方法。类本身是共享库的一部分。共享库本身的编译是可以的。但是当库链接到另一个程序时,该程序具有从共享库中的抽象类派生的另一个类并定义纯虚方法,我得到以下链接器错误。
我这样编译..:
g++ -I../path/to/the/library main.cpp derived.cpp -L../path/to/the/library -lsomename -o shared
链接器错误是:
libsomename.so:对“AbstractClass :: method()”
的未定义引用
这就像抽象类无法访问其纯虚方法一样,但我不会尝试在库中的任何位置创建抽象类的任何实例。
可能是什么问题?
答案 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;
};
确保你这样做,它应该有用。