私はC++オブジェクト指向プロジェクトに取り組んでいます。私のC++ベクタは、ポインタを参照しないときにnullポインタを使用するのはなぜですか?
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
};
Shapeが呼ばれるクラスの親クラスである私は私のListOfShapesクラスのプライベート変数としてベクトルを定義し矩形:私は、上述したベクター(Shapeオブジェクトを指し示す)ポインタをプッシュ機能を含んListOfShapesオブジェクトを作成する主な機能で
class Rectangle:public Shape{
public:
Rectangle(const string &c,double length,double breadth);
void print();
private:
double length, breadth;
};
。ここで呼び出される関数の実装です:
void ListOfShapes::addShape(Shape* s) {
list_of_shapes.push_back(s);
}
そして最後に、ここでは、main関数で呼び出すのアクションです:
int main() {
ListOfShapes* list;
Shape* r;
r = new Rectangle("red",1,1);
list->addShape(r);
return 0;
}
私のコードは正常にコンパイルし、私は同じことを作成しようとしても動作しますvector(メイン関数内にShapeへのポインタを格納する)この問題は、ベクタークラス内のpush_backメソッドが呼び出されたときに何らかの理由でnullポインタを使用しているときに、addShapeメソッド内で発生します。私はこの問題を取り除くために何時間も費やしましたが、その原因を見つけることはできません。私は取得しています エラーは次のとおりです。
'list-> addShape(r);' - 'list'はどこに向いていますか?そしてなぜ単に 'ListOfShapes list;'? – PaulMcKenzie
*私のコードはうまくコンパイルされ、実行されます。* - "コンパイルがうまくいく"とは、構文エラーがないことを意味します。プログラムが論理的に正しいかどうかは関係ありません。 – PaulMcKenzie
ありがとう、私は最初から実現すべきだった。問題を解決しました – Hamza