我有兩個類Car和Person。汽車作爲其成員之一的人,駕駛員的實例。我想移動一輛汽車,同時跟蹤其位置,並將汽車司機移到汽車內並獲取其位置。然而,雖然這是從課堂內部開始工作的(我已經打印出計算出來的值),但是當我嘗試訪問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 []移動()函數中,我有實際非零值。當我在main中打印p []時,我得到的都是零。
新發現的問題:通過一些調試,我發現每次調用move()都會調用Person類的析構函數,從而刪除所有數據。任何人都有關於如何發生這種情況的想法?我不會在任何地方調用析構函數,我如何防止它發生。
謝謝。我更新了這個問題,因爲新的信息改變了可能的錯誤。 – Hypatia 2010-05-04 07:31:21