【问题标题】:calling a template function of the base class调用基类的模板函数
【发布时间】:2013-03-15 22:31:45
【问题描述】:
class Base
{
  protected:
    template<typename TFunc>
    void m_vProcess(TFunc& func) const
    {
         BasePrivateClass<TFunc> baseprivateobj(func);
         // rest of code              
    }

   private:   
       template<typename TFunc>
       class BasePrivateClass
       {
       public:
           BasePrivateClass(TFunc& obj) :m_obj(oParam)
           {}                            
        private:  
           TFunc& m_obj;
   };
};

这是我的派生类:

class Derived: public Base
{
private:
   class DerivedPrivateClass
    {
    public:
        explicit DerivedPrivateClass(int **p): m_objDerived(poParam)
        {}
    private:
         int** m_objDerived;
    };
};

从 Derived 类中的一个函数,我试试这个:

DerivedPrivateClass obj(param);
this->m_vProcess(obj);

我收到多重定义符号的链接器错误 - 符号在基类和派生类中都定义。

我不知道是什么导致了链接器错误。有人可以帮忙吗?

【问题讨论】:

  • 什么是链接器错误?
  • @Alon :符号是多重定义的。基类的许多函数/变量都存在于基类和派生类的目标文件中。
  • 你错过了;在类声明结束时
  • 我在代码中有它...我在此处提出问题时错过了它...抱歉...将编辑并放置它们...
  • 我会尝试发布一个简化的问题,也许创建一个示例,而不是,这段代码有什么问题..

标签: c++ templates linker


【解决方案1】:

正如我评论的.. 有点难以阅读.. 但从外观上看,主要问题是您尝试使用的 m_vProcessAnimParams 函数在 Base 中是私有的,因此 Dervied 无法访问它..

【讨论】:

    猜你喜欢
    • 2012-03-06
    • 1970-01-01
    • 2017-03-25
    • 1970-01-01
    • 1970-01-01
    • 2021-04-20
    • 1970-01-01
    • 2014-09-23
    • 2017-08-27
    相关资源
    最近更新 更多