2014-05-02 21 views
0

即时消息在OOP新和我在这个任务中不断有这个错误。也许你可以帮助我。“错误:没有匹配的函数调用distance :: distance()”...不能从main中的类声明对象吗?

这这里是类的头文件:

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 
} 

最后,这是出现在错误的位置,主要是我尝试从类Distance中声明一个对象。

int main(int argc, char *argv[]) 
{ 

Distance d1; **/*right here*/** 

编辑: 如果我输入:距离D1 =距离(1231, “CSDVS”);它可以工作,但我需要一个空物体,因此我可以使用超载>>运算符

+4

我没有看到任何需要0个参数的'Distance'构造函数,是吗? – Praetorian

+0

另外,你还没有继承构造函数,所以'Magnitude'的默认构造函数也是无效的 – yizzlez

+0

我知道,如果输入:Distance d1 = Distance(1231,“CSDVS”);它确实有效,但是我需要一个空物体,所以我可以使用超载>> – user3027470

回答

1

该错误是由于您尝试初始化一个对象,但您没有使用默认构造函数定义。

[...] but I need an empty objet so I can use the overload on >> operator.

你可以通过简单地定义一个默认的构造函数做到这一点:

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

你,也可能要使用std::string字符串。

相关问题