我正在开发一个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