从模板派生的类不会看到构造函数

时间:2017-11-10 09:45:42

标签: c++ templates inheritance

我尝试从类模板继承" 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

}
海湾合作委员会说:

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

2 个答案:

答案 0 :(得分:4)

您必须使用基础构造函数,您可以使用using作为

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

或旧方式:

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

答案 1 :(得分:0)

你需要:

using TControl<MeshLink*)>::

的TControl;

这是因为ctors不是自动继承的。