【问题标题】:Class derived from template does not see the constructor从模板派生的类看不到构造函数
【发布时间】:2017-11-10 09:45:42
【问题描述】:

我尝试从类模板“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

【问题讨论】:

    标签: c++ templates inheritance


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      你需要:

      using TControl<MeshLink*)>::
      

      TControl;

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

      【讨论】:

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