我遵循here的示例,但是我正在使用模板并调用派生类之一的构造函数。以下代码在没有模板的情况下有效,但是当包含以下代码时,我不确定为什么会收到以下错误:
: error: no matching function for call to ‘AbsInit<double>::AbsInit()’
NotAbsTotal(int x) : AbsInit(x) {};
^
这是代码:
#include <iostream>
using namespace std;
template<typename T>
class AbsBase
{
virtual void init() = 0;
virtual void work() = 0;
};
template<typename T>
class AbsInit : public virtual AbsBase<T>
{
public:
int n;
AbsInit(int x)
{
n = x;
}
void init() { }
};
template<typename T>
class AbsWork : public virtual AbsBase<T>
{
void work() { }
};
template<typename T>
class NotAbsTotal : public AbsInit<T>, public AbsWork<T>
{
public:
T y;
NotAbsTotal(int x) : AbsInit(x) {};
}; // Nothing, both should be defined
int main() {
NotAbsTotal<double> foo(10);
cout << foo.n << endl;
}
最佳答案
您需要将模板参数(在本例中为T
)传递给基本模板类。
改变这个
template<typename T>
class NotAbsTotal : public AbsInit<T>, public AbsWork<T>
{
public:
T y;
NotAbsTotal(int x) : AbsInit<T>(x) // You need to pass the template parameter
{};
};