c++ - 从模板派生的类看不到构造函数

标签 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

最佳答案

你必须使用基础构造函数,为此你可以使用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
};

关于c++ - 从模板派生的类看不到构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47219816/

相关文章:

c++ - 模板参数列表太少——模板方法的特化,g++

c++ - 如何在 C++ 中使用模板?

c++ - 从自身的 vector 继承的类

c++ - 防止对不同大小的、模板化的、多态的、数学 vector 进行组件操作

c# - 继承抽象类的不同具体实现

c++ - 静态、全局和多个翻译单元

c++ - 用迭代器计算矩阵 vector<vector<double>> 的列和?

C++/Unix Home Project构想

c++ - 将多维数组 vector 中单个项目的指针传递给函数c++

c++ - 我怎样才能初始化这个结构?