我刚开始接近cpp。所以这可能是一个简单的问题,可能是一个结构性问题,我必须改变我的设计。
我有3个事实和1个问题。
我有一个Gesture类,里面有一个Point向量
vector<Point> Gesture::getPoints();
Gesture实例在构造函数中重现向量,所以我认为它可能是法向量(无指针)。手势之间不共享矢量,手势也不会改变自己的点(除了标准化)。
Gesture类有一个静态方法,可以规范化[0:w]之间的所有点。 normalize采用内存地址进行就地规范化。我认为正常化可能是一件好事。小部件使用此规范化方法来可视化矢量中的路径,以便在0和小部件宽度之间标准化点
static void Gesture::normalize(vectot<Point> &pts, int w);
我有一个可视化点的小部件:
void MyWidget::setGestures(vector <Gesture *> gs)
因为手势是由另一个小部件产生的,我认为使用指针向量可以很方便地进行一些new Gesture
调用。
我有几个可视化手势的小部件。每个都有不同的宽度(==不同的标准化)。
我第一次使用:
Gesture::rescale(this->w, this->points);
Gesture * g = new Gesture(getPoints(), centroids);
这一切都很好
我第二次:
vector<Gesture* > gs = foo();
int num_gesture = gs.size();
for (int i = 0; i < num_gesture; ++i) {
vector<Point> pts = gs.at(i)->getPoints();
Gesture::rescale( widget->getWidth(), pts );
}
widget->setGestures(gs);
这里有问题,因为这个小部件正在绘制不规范化的点。
我已经尝试了一些疯狂的指针,但如果程序没有崩溃..无论如何它没有规范化。它会得到一些错误:指向临时的指针。
我现在不知道该怎么想。
答案 0 :(得分:1)
虽然你的问题有点令人困惑,但问题似乎是Gesture :: getPoints()返回一个向量而不是对向量的引用,所以它实际上将一个副本返回到内部向量,因此更改它不要修改手势对象本身。