我跟在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;
}
'AbsInit(x)'? –
@TavianBarnes ahaha謝謝!請回答 – pyCthon
這應該工作。但也許我的愚蠢是錯誤的,因爲它應該在GCC 4.5中得到修復,這大大超過了C++ 14。你的編譯器和版本是什麼? –