我尝试从类模板继承" 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
答案 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不是自动继承的。