【问题标题】:Linker/Inheritance/Virtual function problems链接器/继承/虚函数问题
【发布时间】:2011-07-17 04:11:52
【问题描述】:

从模板类继承时遇到问题。
看起来像这样:

template<typename type>  
class base {  
protect:  
  ...  
public  
  ...  
  virtual bool func1(type var1);  
};  

//这个类不是模板化的,而是从模板类派生的,不知道是不是问题

class derived : public base<type_spec_1> {  
protected:  
  ...   
public:  
  ...  
  bool func1(type_spec_1);// function I wish to override;  
};

// 在 .cpp 中,我尝试限定函数的范围,它可以编译但没有链接

bool derived::func1(type_spec_1 type){ return false; };  

链接器以这种格式给我一个错误:LNK2001, unresolved symbol base::func1(type_spec_1);
好像没看到"derived"==base"&lt;type_type_1&gt;"
如果可能的话,我怎样才能为此提供正确的语法????

【问题讨论】:

    标签: class templates inheritance linker virtual


    【解决方案1】:

    你不需要做这样的事情吗?

    template<typename type>  
    class base {  
    protect:  
      ...  
    public  
      ...  
      // provide implementation to be overriden
      virtual bool func1(type var1) { return (bool) 0; } 
    };  
    

    因为class derived : public base&lt;type_spec_1&gt;derived 是从一个类型base&lt;type_spec_1&gt; 衍生而来的,但是base&lt;type_spec_1&gt; 的类型定义还没有完全实现?

    【讨论】:

    • 谢谢。那成功了。我一直在假设虚函数是抽象的,直到你给它们一个定义。
    • @Jen:你可以写 virtual bool func1(type var1) = 0 来拥有它。寻找“纯虚方法”
    • @jen - 好主意。你为什么不发布一个例子的答案。
    • 已编译!原来我的方法有点复杂,即首先我有一个结构,其参数取决于模板类型名: struct{ typename1 Type; };然后我有一个返回这个“动态”结构的函数,然后无法创建抽象函数,必须定义它们!
    猜你喜欢
    • 2020-07-17
    • 1970-01-01
    • 1970-01-01
    • 2013-07-24
    • 2015-04-23
    • 2012-10-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多