Drag オブジェクトを考えてみましょう:
class Drag {
public:
Drag(ofVec3f _pos);
ofVec3f pos;
}
新しいインスタンスが作成されると、位置が保存されます。
Drag::Drag(ofVec3f _pos) {
pos = _pos;
}
マウスが移動すると位置が更新されます。
void Drag::mouseMoved() {
pos.x = ofGetMouseX();
pos.y = ofGetMouseY();
}
アプリケーションのメイン クラス (openframeworks の testApp) で:
class testApp : public ofBaseApp {
public:
vector<Drag> drags;
vector<ofVec3f *> points;
}
マウスが押されたときに Drag を作成し、その位置を points と呼ばれるベクトルに保存します。
void testApp::mousePressed(int x, int y, int button) {
Drag drag = Drag(ofVec3f(ofGetMouseX(), ofGetMouseY(), 0));
drags.push_back(drag);
points.push_back(&drag.pos);
}
ドラッグを移動すると、その位置が更新されるのがわかりますが、points[0] は変更されません。
void testApp::update(){
if (!drags.size()) return;
cout << drags[0].pos.x << ", " << drags[0].pos.y << endl;
cout << &points[0]->x << ", " << &points[0]->y << endl;
}
ポイントのタイプが の場合、vector<ofVec3f>
points[0] は最初の drags[0].pos のコピーのようです。そうであればvector<ofVec3f *>
、&drag に等しいメモリ上のアドレスを格納しているようです。
points[0] が drags[0].pos を指し、drags[0].pos.x と drags[0].pos.y が更新されたときにその x、y 値を更新するにはどうすればよいですか?
points[0 ] を drags[0].pos への参照にするにはどうすればよいですか?
編集:私を正しい方向に向けてくれたyonilevyに感謝します。std::list を使用して更新された実際の例を次に示します。
// testApp.h
list<Drag> drags;
vector<ofVec3f *> points;
// testApp::mousePressed
drags.push_back(Drag(ofVec3f(ofGetMouseX(), ofGetMouseY(), 0)));
points.push_back(&drags.back().pos);