나는 C++ 객체 지향 프로젝트를 연구 중이다.포인터를 무시할 때 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
};
모양이라는 클래스의 상위 클래스 내 ListOfShapes 클래스의 private 변수로 벡터를 정의 직사각형 : 메인 함수에
class Rectangle:public Shape{
public:
Rectangle(const string &c,double length,double breadth);
void print();
private:
double length, breadth;
};
는 제가 위에서 언급 한 벡터에 대한 포인터 (Shape 객체를 가리키는)를 가압하는 기능을 포함하는 ListOfShapes 객체를 생성한다. 나도 같은를 만들려고하면
int main() {
ListOfShapes* list;
Shape* r;
r = new Rectangle("red",1,1);
list->addShape(r);
return 0;
}
내 코드는 미세한 컴파일하고 실행합니다 마침내 여기
void ListOfShapes::addShape(Shape* s) {
list_of_shapes.push_back(s);
}
그리고 메인 함수에서 호출하는 작업입니다 : 여기에 호출 된 함수의 구현입니다 main 함수 안에 vector (Shape에 대한 포인터를 저장). 이 문제는 addShape 메서드 내에서 발생합니다. 벡터 클래스의 push_back 메서드가 호출 될 때 어떤 이유 때문에 null 포인터가 사용됩니다. 나는이 문제를 debbug하려고 노력하는 데 시간을 보냈지 만 그 원인을 찾을 수없는 것 같습니다. 내가 점점 오전 오류 : 당신은 초기화되지 않은 포인터 list
에 액세스하는
'list-> addShape (r);'-'list'가 가리키는 곳은 어디입니까? 그리고 단순히'ListOfShapes list; – PaulMcKenzie
* 내 코드가 잘 컴파일되고 실행됩니다. * - "컴파일 중"은 구문 오류가 없음을 의미합니다. 프로그램이 논리적으로 정확한지 여부와 관련이 없습니다. – PaulMcKenzie
고마워, 처음부터 깨달았어야 했어. 문제 해결 – Hamza