2013-03-26 85 views
-4
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; 
    }; 
}; 

衍生類的功能,我試試這個:

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

我獲得多重定義符號的鏈接器錯誤 - 符號在基類和派生類中定義。

我不知道是什麼導致鏈接器錯誤。誰能幫忙?

+0

什麼是鏈接器錯誤? – Alon 2013-03-26 07:46:10

+0

@Alon:符號被多重定義。基類的許多函數/變量都存在於基類和派生類的對象文件中。 – mdv 2013-03-26 07:47:44

+0

你想念;在課程結束的時候我會在代碼中加入 – Alon 2013-03-26 07:49:58

回答

0

正如我評論..有點難以閱讀..但從它的外觀來看,一個主要問題是您嘗試使用的m_vProcessAnimParams函數在Base中是私有的,因此Dervied無法訪問它..