2017-11-10 19 views
0

クラステンプレート "TControl"から継承しようとしましたが、派生クラス "TControlML"には基本クラスのコンストラクタが表示されません。私は関連する記事を読んだが、それでも原因を見ていない。私は、最小限の例を作っていますテンプレートから派生したクラスにコンストラクタが表示されない

using namespace std; 

class MeshLink 
{ 
}; 


template<typename WU_TYPE> 
class TControl 
{ 
public: 
    TControl(std::vector<WU_TYPE>& vWorkunits_): 
     sTodo(vWorkunits_.begin(),vWorkunits_.end()) 
    {} 
    std::set<WU_TYPE> sTodo;  
}; 



class TControlML:public TControl<MeshLink*> 
{ 
public: 

}; 


int main() 
{ 
    vector<MeshLink*> vMeshLinks; 
    TControl<MeshLink*> ctrl(vMeshLinks); // Good 
    TControlML ctrl2(vMeshLinks); // Fails 

} 

GCCは言う:

test.cpp:35:29: error: no matching function for call to ‘TControlML::TControlML(std::vector<MeshLink*, std::allocator<MeshLink*> >&)’ 
    TControlML ctrl2(vMeshLinks); // Fails 

答えて

4

あなたは基本コンストラクタを使用する必要があり、あなたがその

class TControlML:public TControl<MeshLink*> 
{ 
public: 
    using TControl::TControl; 
}; 

か、古い道をusingを使用する場合があります。

class TControlML:public TControl<MeshLink*> 
{ 
public: 
    TControlML(std::vector<WU_TYPE>& vWorkunits_):TControl(vWorkunits_) {} 
    // Same for each constructor 
}; 
0

必要があります:

using TControl<MeshLink*)>:: 

TControl;

これは、ctorsが自動的に継承されないためです。

関連する問題