У меня есть два класса, Автомобиль и Человек. Автомобиль имеет в качестве одного из своих членов экземпляр лица, водителя. Я хочу переместить автомобиль, следя за его местоположением, а также переместить водителя в машину и узнать его местоположение. Однако, хотя это работает изнутри класса (я распечатал значения по мере их вычисления), когда я пытаюсь получить доступ к данным из main, там ничего нет. То есть позиция массива [] заканчивается пустой. Мне интересно, если что-то не так с тем, как я настроил классы - может ли это быть проблемой объема объекта?
Я попытался упростить код, чтобы дать только то, что необходимо. Надеюсь, это охватывает все, что вам нужно будет увидеть. Конструктор Car () заполняет массив смещений драйвера ненулевыми значениями.
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];
}
}
В основном:
Car * car = new Car();
car->move();
float p[3];
car->getDriverPosition(p);
Когда я печатаю driverLocation [] внутри функции move (), я получаю реальные ненулевые значения. Когда я печатаю p [] внутри main, я получаю только нули.
Недавно обнаруженная проблема: с помощью некоторой отладки я обнаружил, что каждый раз, когда я вызываю move (), вызывается деструктор для класса Person, и, таким образом, удаляются все данные. У кого-нибудь есть идеи о том, как это могло произойти? Я нигде не вызываю деструктора, как я могу предотвратить это.