在类模板中没有匹配的函数调用T :: T()

时间:2014-01-06 16:47:53

标签: c++ templates

我正在尝试编写通用模板类,但是当我尝试实现它时,我一直收到此错误:

no matching function for call to type_impl::type_impl()

其中type_impl是我试图使用类的类型。

这是我的代码:

class BaseClass {
protected:
    // Some data
public:
    BaseClass(){
        // Assign to data
    }; 
};

template <class T>
class HigherClass : BaseClass {
private:
    T data;
public:
    // Compiler error is here.
    HigherClass(){};
    // Other functions interacting with data
};

class Bar {
private:
    // Some data
public:
    Bar(/* Some arguments*/) {
        // Assign some arguments to data
    };
};

// Implementation
HigherClass<Bar> foo() {
     HigherClass<Bar> newFoo;

     // Do something to newFoo

     return newFoo;
};

1 个答案:

答案 0 :(得分:4)

问题在于,由于您为Bar提供了非默认构造函数,编译器不再提供默认构造函数,这在您的代码中是必需的:

HigherClass(){}; // will init data using T()

因此为Bar提供默认构造函数。例如:

class Bar {

public:
    Bar() = default; // or code your own implementation
    Bar(/* Some arguments*/) { ... }
};