【问题标题】:Abstract classes in shared library共享库中的抽象类
【发布时间】:2011-02-09 12:14:54
【问题描述】:

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

我是这样编译的..:

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

链接器错误是:

libsomename.so:对 `AbstractClass::method()' 的未定义引用

就像抽象类不能访问它的纯虚方法,但我不会尝试在库中的任何地方创建抽象类的任何实例。

可能是什么问题?

【问题讨论】:

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


    【解决方案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;
    };
    

    确保你这样做,它应该可以工作。

    【讨论】:

    • 你能把出错的代码贴出来吗?
    猜你喜欢
    • 2015-10-03
    • 2011-11-09
    • 1970-01-01
    • 1970-01-01
    • 2010-11-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-24
    相关资源
    最近更新 更多