C++ C++;构造函数继承没有匹配的函数
我目前正在从事一个包含多个课程的项目:C++ C++;构造函数继承没有匹配的函数,c++,templates,inheritance,c++14,C++,Templates,Inheritance,C++14,我目前正在从事一个包含多个课程的项目: 一个抽象的:模板类向量{…} 另一个抽象类:模板类AbsPolynom:虚拟公共向量 从Vector的继承:模板类Dvector:虚拟公共向量 最后一个:模板类Polynom:public AbsPolynom,public Dvector{ 当我调用Polynom时,如下所示:Polynom测试(std::size_t(3),3,3); 我得到这个错误: In file included from Polynom.cpp:6:0,
- 一个抽象的:
模板类向量{…}
- 另一个抽象类:
模板类AbsPolynom:虚拟公共向量
- 从Vector的继承:
模板类Dvector:虚拟公共向量
- 最后一个:
当我调用Polynom时,如下所示:模板类Polynom:public AbsPolynom,public Dvector{
Polynom测试(std::size_t(3),3,3);
Polynom(std::size_t dim, const Elem& value, const int& degrees ): AbsPolynom<Elem>(dim, value, degrees) {};
Polynom(std::size_t dim, const Elem& value, const int degrees[] ): AbsPolynom<Elem>(dim, value, degrees) {};
Polynom(std::size_t dim, const Elem values[], const int& degrees): AbsPolynom<Elem>(dim, values, degrees) {};
Polynom(std::size_t dim, const Elem values[], const int degrees[]): AbsPolynom<Elem>(dim, values, degrees) {};
Polynom(std::size\t dim,const Elem&value,const int°rees):AbsPolynom(dim,value,degrees){;
多项式(std::size_t dim,const Elem&value,const int degrees[]):绝对多项式(dim,value,degrees){};
多项式(std::size_t dim,常量元素值[],常量int和度):绝对多项式(dim,值,度){};
多项式(std::size_t dim,常量元素值[],常量整数度[]):绝对多项式(dim,值,度){};
押沙龙:
explicit AbsPolynom(std::size_t, const Elem&, const int& );
explicit AbsPolynom(std::size_t, const Elem&, const int [] );
explicit AbsPolynom(std::size_t, const Elem [], const int& );
explicit AbsPolynom(std::size_t, const Elem [], const int [] );
template <typename Elem>AbsPolynom<Elem>::AbsPolynom(std::size_t dim, const Elem& value, const int& degrees ): Vector<Elem>(dim, value), _degrees(new Elem[dim]),_polynomDegree(degrees) {
for (std::size_t i = 0; i < dim; ++i) _degrees[i] = degrees;}
template <typename Elem>AbsPolynom<Elem>::AbsPolynom(std::size_t dim, const Elem& value, const int degrees[] ): Vector<Elem>(dim, value), _degrees(new Elem[dim]),_polynomDegree(degrees[0]) {
for (std::size_t i = 0; i < dim; ++i) _degrees[i] = degrees[i];}
template <typename Elem>AbsPolynom<Elem>:: AbsPolynom(std::size_t dim, const Elem values[], const int& degrees): Vector<Elem>(dim, values), _degrees(new Elem[dim]),_polynomDegree(degrees) {
for (std::size_t i = 0; i < dim; ++i) _degrees[i] = degrees;}
template <typename Elem>AbsPolynom<Elem>::AbsPolynom(std::size_t dim, const Elem values[], const int degrees[]): Vector<Elem>(dim, values), _degrees(new Elem[dim]),_polynomDegree(degrees[0]) {
for (std::size_t i = 0; i < dim; ++i) _degrees[i] = degrees[i];}
显式多项式(std::size_t,const Elem&,const int&);
显式AbsPolynom(std::size_t,const Elem&,const int[]);
显式AbsPolynom(std::size_t,const Elem[],const int&);
显式AbsPolynom(std::size_t,const Elem[],const int[]);
模板AbsPolynom::AbsPolynom(std::size\t dim,const Elem&value,const int°rees):向量(dim,value),\u degrees(新元素[dim]),\u polynomDegree(度){
对于(std::size_t i=0;i explicit Vector(std::size_t dim, const Elem& elem);
explicit Vector(std::size_t, const Elem[] );
template <typename Elem>Vector<Elem>::Vector (std::size_t dim, const Elem& elem):_dim(dim), _values(new Elem[dim]) {
for (std::size_t i = 0; i < dim; ++i) _values[i] = elem; }
template <typename Elem>Vector<Elem>::Vector ( std::size_t dim, const Elem elem[]):_dim(dim), _values(new Elem[dim]) {
for (std::size_t i = 0; i < dim; ++i) _values[i] = elem[i];
}
显式向量(std::size\t dim,const Elem&Elem);
显式向量(std::size_t,const Elem[]);
模板向量::向量(std::size\t dim、常量元素和元素):\u dim(dim),\u值(新元素[dim]){
对于(std::size_t i=0;i
当您拥有虚拟继承时,派生最多的类必须调用虚拟基类的构造函数。只有一个副本,必须准确调用一次
如果未调用,编译器将尝试调用默认构造函数(如果没有,则失败).请用一个或
向量
是否有无参数构造函数来回答你的问题?请显示向量
和多项式
构造函数的签名。我刚刚编辑了我的问题:)所以在多项式中,我必须调用向量构造函数一次,这样我就可以得到他的属性,而在多项式中,我也可以得到他的属性?我尝试了以下方法:多项式(std::size\u t dim,常量元素值[],常量整数度[]):Dvector(dim,值),AbsPolynom(dim,度){};当我调用Dvector时,我与我原来的问题有相同的错误,当我调用Vector而不是Dvector时,我也有相同的错误,但这次使用Dvector时,你不应该调用Vector而不是Dvector
,而是除了。最派生的类初始化其直接基和任何虚拟基。我必须同时调用这两个它们是构造函数??如何创建?如果它应该创建相同的属性虚拟基,这是很棘手的!编译器只会从最派生的类调用它们的构造函数,即使它们在中间类的构造中被提到。这就是它的工作方式,以确保虚拟基只构造一次。