Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/137.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C++;构造函数继承没有匹配的函数_C++_Templates_Inheritance_C++14 - Fatal编程技术网

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:public AbsPolynom,public Dvector{

    当我调用Polynom时,如下所示:
    Polynom测试(std::size_t(3),3,3);

我得到这个错误:

In file included from Polynom.cpp:6:0, from main2.cpp:4: Polynom.hpp: In instantiation of ‘Polynom::Polynom(std::size_t, const Elem&, const int&) [with Elem = int; std::size_t = long unsigned int]’: main2.cpp:10:41: required from here Polynom.hpp:14:105: error: no matching function for call to ‘Vector::Vector()’ Polynom(std::size_t dim, const Elem& value, const int& degrees ): AbsPolynom(dim, value, degrees) {}; 在Polynom.cpp:6:0中包含的文件中, 来自main2。cpp:4: Polynom.hpp:在“Polynom::Polynom(std::size\u t,const Elem&,const int&)[with Elem=int;std::size\u t=long unsigned int]的实例化中]: main2.cpp:10:41:从这里开始需要 Polynom.hpp:14:105:错误:调用“Vector::Vector()”时没有匹配的函数 多项式(std::size_t dim,const Elem&value,const int°rees):绝对多项式(dim,value,degrees){}; 所以我的问题是:为什么它从Vector调用这个构造函数?我总是有一个参数,但它初始化这个类时没有参数

以下是我的构造函数:

多项式:

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
,而是除了。最派生的类初始化其直接基和任何虚拟基。我必须同时调用这两个它们是构造函数??如何创建?如果它应该创建相同的属性虚拟基,这是很棘手的!编译器只会从最派生的类调用它们的构造函数,即使它们在中间类的构造中被提到。这就是它的工作方式,以确保虚拟基只构造一次。