ベクトル内のオブジェクトへのポインターを含むオブジェクトを操作する際のアドバイスをお願いします。
ベクトルの特定の要素を操作できるようにしたいと考えています。オブジェクトからデータをコピーしようとしましたが、戻って同じ要素が更新されたことを確認するのに苦労したので、ベクターのその要素へのポインターを返すだけで、そのポインターを操作し、正しい要素が更新されるようにする必要はありません。データで。
動的オブジェクトのハンドルを操作したい。
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();
};
このコードを完成させ、ポインターを正しく管理するにはどうすればよいですか?