【发布时间】:2012-11-23 01:02:19
【问题描述】:
考虑一个 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;
}
按下鼠标时创建一个拖动并将其位置存储在一个称为点的向量中:
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);
【问题讨论】:
标签: c++ pointers reference openframeworks