두 클래스 인 Car 및 Person이 있습니다. Car에는 멤버 중 하나 인 Person이라는 인스턴스가 있습니다. 나는 그 위치를 추적하면서 차를 움직이고 차 안에서 운전자를 움직여 그 위치를 얻고 싶다. 그러나 이것이 클래스 내부에서 작동하는 동안 (계산 된대로 값을 출력했습니다), 메인에서 데이터에 액세스하려고하면 아무 것도 없습니다. 나는. 배열 위치 []가 비어있게됩니다. 클래스를 설정하는 방식에 문제가 있는지 궁금합니다. 오브젝트의 범위 문제 일 수 있습니까?클래스 외부에서 액세스 할 때 클래스 내부의 데이터 변경 내용이 표시되지 않습니다.
필자는 코드를 단순화하여 필요한 것만 제공하려고 노력했습니다. 다행히도 당신이보아야 할 모든 것을 다 포함하고 있기를 바랍니다. 생성자 Car()는 드라이버의 오프셋 배열을 0이 아닌 값으로 채 웁니다.
class Car{
public:
Container(float=0,float=0,float=0);
~Container();
void move(float);
void getPosition(float[]);
void getDriverPosition(float[]);
private:
float position[3];
Person driver;
float heading;
float velocity;
};
class Person{
public:
Person(float=0,float=0,float=0);
~Person();
void setOffset(float=0,float=0,float=0);
void setPosition(float=0,float=0,float=0);
void getOffset(float[]);
void getPosition(float[]);
private:
float position[3];
float offset[3];
};
일부 기능 :
void Car::move(float time){
float distance = velocity*time;
location[0] += distance*cos(PI/2 - heading);
location[1] += distance*sin(PI/2 - heading);
float driverLocation [3];
float offset[3];
driver.getOffset(offset);
for (int i = 0; i < 3; i++){
driverLocation[i] = offset[i] + location[i];
}
driver.setPosition(driverLocation[0],driverLocation[1],driverLocation[2]);
}
void Car::getDriverPosition(float p[]){
driver.getPosition(p);
}
void Person::getPosition(float p[]){
for (int i = 0; i < 3; i++){
p[i] = position[i];
}
}
void Person::getOffset(float o[]){
for (int i = 0; i < 3; i++){
o[i] = offset[i];
}
}
메인 이어 : I 인쇄 할 때
Car * car = new Car();
car->move();
float p[3];
car->getDriverPosition(p);
driverLocation [] 이동() 함수 내부 I 실제 제로가 아닌 값을 갖는다. 메인에서 p []를 프린트 할 때, 나는 모두 0입니다.
새로 발견 된 문제 : 일부 디버깅을 통해 move()를 호출 할 때마다 Person 클래스의 소멸자가 호출되고 모든 데이터가 삭제된다는 것을 발견했습니다. 이것이 일어날 수있는 방법에 대해 누구나 알고 있습니까? 나는 어디에서나 소멸자를 부르지 않는다. 나는 그것을 어떻게 막을 수 있을까?
감사합니다. 나는 새로운 정보가 무엇이 잘못 될 수 있었는지로 질문을 업데이트했다. – Hypatia