2017-11-19 2 views
-2

Ich habe gerade mit der Programmierung in C++ und ich verstehe nicht, warum Xcode sagt, dass "Variable Typ 'Rect' ist eine abstrakte Klasse" .. Sie können einen Teil meines Codes hier finden : Vielen Dank im Voraus für Ihre Hilfe,Erstellen Sie ein Objekt aus einer Klasse in C++

main(){ 
    Rect r1(10,5,"R1"); 
return 0; 
} 
class Rect : public Figure 
{ 
public: 
    Rect(int l, int h,std::string Label) : Figure(l), _h(h),_Label(Label) {}; 
    ~Rect(){}; 
    std:: vector<std::string> toString() const; 

protected: 
    int _h; 
    int _l; 
    std::string _Label; 
}; 

class Figure 
{ 
public: 
    Figure(int l):_l(l){} 
    virtual std::vector<std::string> toStrings() const =0; 
    virtual ~Figure(); 
protected: 
    int _l; 
}; 
+0

Dies ist Standardfehler. Dies bedeutet, dass einige reine virtuelle Methoden nicht für die Klasse implementiert wurden, für die Sie ein Objekt erstellen. In diesem Fall muss Rect 'std :: vector toStrings() const' implementieren. –

+2

'toString()' vs 'toStrings()' –

Antwort

1

Dieser Standardfehler ist. Dies bedeutet, dass eine reine virtuelle Methode für die Klasse, für die Sie ein Objekt erstellen, nicht implementiert wurde.

In diesem Fall muss Rect std::vector<std::string> toStrings() const implementieren. Um es zu beheben:

class Rect : public Figure 
{ 
public: 
    Rect(int l, int h,std::string Label) : Figure(l), _h(h),_Label(Label) {}; 
    ~Rect(){}; 
    std:: vector<std::string> toStrings() const override 
    { 
    return {}; 
    } 

protected: 
    int _h; 
    int _l; 
    std::string _Label; 
}; 

Da C++ 11 dort override Schlüsselwort ist, die solche Fehler erkennen hilft.

Verwandte Themen