我正在開發一個C++對象方向項目。我定義了一個向量作爲我ListOfShapes類私有變量:爲什麼我的C++向量在不遵守指針時使用空指針。
vector<Shape*> list_of_shapes = {};
形狀是另一個類,以下是它的頭文件:
class Shape{
private:
string color;//private variable
public:
Shape(string c);//non-default constructor
string getColor();//returns color of the object
virtual void print() = 0;//pure virtual "print" function
};
形狀是父類的類名爲矩形:
class Rectangle:public Shape{
public:
Rectangle(const string &c,double length,double breadth);
void print();
private:
double length, breadth;
};
在主函數創建其中包含推壓的指針(指向Shape對象)進入我上面提到的載體的功能的ListOfShapes對象。下面是調用函數的實現:
void ListOfShapes::addShape(Shape* s) {
list_of_shapes.push_back(s);
}
最後在這裏呼籲在主函數的作用:
int main() {
ListOfShapes* list;
Shape* r;
r = new Rectangle("red",1,1);
list->addShape(r);
return 0;
}
我的代碼編譯罰款,甚至可以運行,如果我嘗試創建相同的向量(存儲指向Shape的指針)在主函數內。這個問題發生在addShape方法內部,當vector類中的push_back方法被調用時,出於某種原因它使用了空指針。我花了幾個小時試圖破壞這個問題,但我似乎無法找到它的原因。 我得到的錯誤是:
'list-> addShape(r);' - 'list'指向哪裏?爲什麼不簡單地'ListOfShapes list;'? – PaulMcKenzie
*我的代碼編譯良好,甚至運行* - 「編譯好」只意味着沒有語法錯誤。它對程序是否在邏輯上是正確的沒有影響。 – PaulMcKenzie
非常感謝,我應該從一開始就意識到。問題解決了 – Hamza