C++ 调用构造函数类时没有匹配的函数
我正在尝试为一个子类创建构造函数。但我一直收到这个错误信息。我试着在这里搜索,但我找到的答案都不适用于我的问题。对不起,如果以前有人问过 在构造函数“EixoDinamico::EixoDinamico(double,double,Serie*,bool)”中:C++ 调用构造函数类时没有匹配的函数,c++,function,constructor,C++,Function,Constructor,我正在尝试为一个子类创建构造函数。但我一直收到这个错误信息。我试着在这里搜索,但我找到的答案都不适用于我的问题。对不起,如果以前有人问过 在构造函数“EixoDinamico::EixoDinamico(double,double,Serie*,bool)”中: 错误:没有匹配的函数用于调用“Eixo::Eixo()” 注:候选人包括: 注意:Eixo::Eixo(std::string,double,double) 注:候选人需要3个参数,提供0个参数 注:Eixo::Eixo(const-E
错误:没有匹配的函数用于调用“Eixo::Eixo()”
注:候选人包括: 注意:Eixo::Eixo(std::string,double,double)
注:候选人需要3个参数,提供0个参数
注:Eixo::Eixo(const-Eixo&)
注意:候选者需要1个参数,提供0个参数 编辑:如果我重写代码,使子类现在成为一个独立的类,问题就会消失,但我需要它成为一个子类 代码如下: Eixo.h
#ifndef EIXO_H
#define EIXO_H
#include <iostream>
using namespace std;
class Eixo
{
public:
Eixo(string titulo, double minimo, double maximo);
virtual ~Eixo();
private:
string titulo;
double minimo;
double maximo;
};
#endif // EIXO_H'
#ifndef EIXODINAMICO_H
#define EIXODINAMICO_H
#include "Eixo.h"
class EixoDinamico : public Eixo
{
public:
EixoDinamico(double minimoPadrao, double maximoPadrao, Serie*
base, bool orientacaoHorizontal);
virtual ~EixoDinamico();
private:
};
#endif // EIXODINAMICO_H
EixoDinamico.cpp
#include "Eixo.h"
#include <iostream>
Eixo::Eixo(string titulo, double minimo, double maximo)
{
this->maximo = maximo;
this->minimo = minimo;
this->titulo = titulo;
}
Eixo::~Eixo()
{
//dtor
}
#include "EixoDinamico.h"
#include "Eixo.h"
EixoDinamico::EixoDinamico(double minimoPadrao, double maximoPadrao, Serie*
base, bool orientacaoHorizontal):Eixo()
{
if(base->getQuantidade()<2){
inicioEixo = minimoPadrao;
fimEixo = maximoPadrao;
}
limiteInferior = base->getLimiteInferior();
limiteSuperior = base->getLimiteSuperior();
if (orientacaoHorizontal){
inicioEixo = limiteInferior->getX();
fimEixo = limiteSuperior->getX();
}
else{
inicioEixo = limiteInferior->getY();
fimEixo = limiteSuperior->getY();
}
}
EixoDinamico::~EixoDinamico()
{
//dtor
}
#包括“EixoDinamico.h”
#包括“Eixo.h”
EixoDinamico::EixoDinamico(双倍最小值,双倍最大值,系列*
基底,布尔(水平):Eixo()
{
if(base->getQuantidade()getLimiteInferor();
limiteSuperior=base->getLimiteSuperior();
如果(水平方向){
inicioEixo=limiteInferior->getX();
fimEixo=limiteSuperior->getX();
}
否则{
inicioEixo=limiteInferior->getY();
fimEixo=limiteSuperior->getY();
}
}
EixoDinamico::~EixoDinamico()
{
//dtor
}
在EixoDinamico
的构造函数中,您正在调用Eixo
(Eixo()
)的默认构造函数,但该构造函数不存在。声明Eixo
的自定义构造函数将禁用默认构造函数的自动生成,而您尚未明确声明一个。为此,添加
Eixo() = default;
声明Eixo或自己实现一个
还要确保调用默认构造函数是您真正想要的。正如下划线所指出的,这没有多大意义。错误的可能重复项是完全正确和清楚的。基类没有接受空参数列表的构造函数,但在这里您尝试调用一个。换句话说:wh如果子类没有得到初始化它们的基,那么基类的成员应该发生at?或者子类没有使用/关心这些变量吗?如果是,为什么它会从拥有它们的类继承?它不应该。另外,为什么在
EixoDinamico.hpp
中声明构造函数的一个签名,而在EixoDin>中定义另一个amico.cpp
?我认为更多关于构造函数工作原理的背景知识是必要的order@underscore_d在创建问题时,different声明是一个错误,感谢您指出。子类使用Serie*base
来获取将类构造函数初始化所需的变量。换句话说,变量(字符串titulo,双最小值,双最大值)
需要由EixoDinamico构造函数位于Serie*base
内部。这仍然意味着您可能应该将它们交给基类的构造函数。什么是Serie
?是的,更喜欢使用ctor init列表,而不是在ctor主体中设置成员,在这种情况下意味着调用现有的非defa然后,真正地考虑为什么你的子类不在其基础上初始化这些成员变量,以及这个问题的答案是否意味着它不应该是子类,或者那些成员应该在别的地方。