2014-05-02 43 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字符串。

相關問題