"Error: no matching function for call distance::distance()"......无法从 main 中的类声明对象?

"Error: no matching function for call distance::distance()" ...Can´t declare an object from a class in main?

本文关键字:distance main 对象 声明 matching no Error function for call      更新时间:2023-10-16

我是OOP新手,在这个任务中我一直有这个错误。也许你能帮我一下。

这里是Class头文件:

class Distance : public Magnitude
{
private:
    double Cantidad;
    char* Unidad;
public:
    Distance(double c, char* u);
    Distance(const Distance& d);
    double getDistance(){return Cantidad;}
    void setDistance(double val) {Cantidad=val;}
    char* getUnidad(){return Unidad;}
    void setUnidad(char* uni) {Unidad=uni;}
    virtual ~Distance();
    Distance& operator =(const Distance & d);
    Distance operator +(const Distance & d);
    Distance operator -(const Distance & d);
    Distance operator *(const Distance & d);
    Distance operator /(const Distance & d);
    friend ostream& operator << (ostream &o,const Distance &d);
    friend istream& operator >> (istream &o, Distance &d);
};

这里是cpp文件,我在这里做了定义:

#include "Distance.h"
Distance::Distance(double c, char* u)
{
    Cantidad=c;
    Unidad=u;
}
Distance::Distance(const Distance& d)
{
 cout << "[***] NumComplejo -> Constructor por copia " << endl;
 Cantidad = d.Cantidad;
 Unidad = d.Unidad;
}
Distance::~Distance()
{
    //dtor
}

最后,这是错误出现的地方,在main中,我试图从类Distance声明一个对象。

int main(int argc, char *argv[])
{
 Distance d1; **/*right here*/**

编辑:如果我输入:Distance d1=Distance(1231,"CSDVS");它确实可以工作,但我需要一个空对象,以便我可以使用重载on>>操作符

此错误是由于您试图使用未定义的默认构造函数初始化对象而导致的。

[…但是我需要一个空对象,这样我就可以使用重载on>>操作符。

你可以简单地定义一个默认构造函数:

// …
Distance::Distance() 
    : Cantidad(0)
    , Unidad(nullptr) 
    {}
// …

您也可能希望对字符串使用std::string