указатель на объект в векторе, хранящемся во втором объекте

Я хотел бы получить совет по работе с объектами, содержащими указатели на объекты в векторе.

Я хотел бы иметь возможность манипулировать конкретными элементами вектора. Я попытался скопировать данные из объектов, затем у меня возникли проблемы с возвратом и гарантией того, что те же элементы были обновлены, поэтому я хотел бы просто вернуть указатель на этот элемент вектора, манипулировать этим указателем и не должен гарантировать, что правильные элементы обновляются с данными.

Я хочу работать с ручкой для динамических объектов.

class h_AFV{
AFV * pAFV;
int * cnt;

friend class AFV;

public:

h_AFV(int);
h_AFV(int, int, int, int);
h_AFV(const h_AFV& afv) : cnt(afv.cnt), pAFV(afv.pAFV){++*cnt;}
h_AFV& operator = (const h_AFV&);
~h_AFV();...

Хранится в:

   std::vector<h_AFV>AFVs;

Я хочу выбрать конкретный элемент, который будет возвращен:

h_AFV* player::gtAFV(int n){
return  new h_AFV(AFVs[n]);     <-This is how I return a pointer to the element I want to manipulate
}

Затем я хочу добавить указатель на другой объект с другими указателями или данными, которые изменят выбранный элемент:

void control::moveOrder(int a, int sp , bool al){

h_AFV * ph_AFV = NULL;
if(currentPlayer == 1){ph_AFV = pl1->gtAFV(marker);}  <-This gets the pointer
if(currentPlayer == 2){ph_AFV = pl2->gtAFV(marker);}

ph_AFV->setStat(1);   <-These work I tested the pointer with some output.
ph_AFV->setOrder('m');

mvOrder m(ph_AFV, a, sp, al);

checker(ph_AFV);
moving.push_back(m);delete ph_AFV;

}

Я добавил конструкторы копирования и перегрузил операторы присваивания. Обычно код будет работать до тех пор, пока функция не выйдет из области видимости или когда я попытаюсь манипулировать сохраненными данными.

   void mvOrder::resolve(){
int rate = speed * .01;

MessageBox(NULL, "Marker 1", "Marker!", MB_OK);

int dir = pMover->gtFace() * .0174532925;
int DBI = pMover->gtDBI();
int MaxSpd = data[DBI].gtRdSpeed();
int spd = rate * MaxSpd;
MessageBox(NULL, "Marker 2", "Marker!", MB_OK);
int dist = spd;
coord c = pMover->gtCoord();
MessageBox(NULL, "Tank Moving", "Marker!", MB_OK);
float tx = c.Xloc;
float ty = c.Yloc;
tx += (float)dist*(sin(dir));
ty -= (float)dist*(cos(dir));
int nx = tx;
int ny = ty;
pMover->setLoc(nx, ny);
if(align){pMover->setAngle(dir);}
else{pMover->setNAngle(dir);}

}struct mvOrder{
h_AFV * pMover;

int azmuth;
int speed;
bool align;

mvOrder();
mvOrder(h_AFV*, int, int, bool);
mvOrder(const mvOrder&);
~mvOrder();
void resolve();
};

Как я могу выполнить этот код и правильно управлять указателями?

0

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]