передать указатель как адрес памяти и сделать его постоянным - PullRequest
0 голосов
/ 21 февраля 2012

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

У меня есть 3 факта и 1 проблема.

факт 1:

у меня есть класс Gesture с вектором Point внутри

vector<Point> Gesture::getPoints();

экземпляры Gesture получают вектор в конструкторе, поэтому я думаю, что это может быть нормальный вектор (без указателя).векторы не распределяются между жестами, и жест не изменяет свои собственные точки (кроме нормализации).

fact 2:

Класс жестов имеет статический метод, который нормализует все точки между [0: w].нормализовать взять адрес памяти для нормализации на месте.я думаю, что нормализация на месте могла бы быть хорошей вещью.этот метод нормализации используется виджетами для визуализации пути в векторе для нормализации точки между 0 и шириной виджета

static void Gesture::normalize(vectot<Point> &pts, int w);

fact 3:

У меня есть виджет, который визуализируетОчки:

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);

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

Я попробовал немного сумасшествия с указателями, но если программа не падает, в любом случае, она не нормализоваласьи он получает какую-то ошибку, например: указатель на временную.

Я не знаю, что думать, сейчас.

1 Ответ

1 голос
/ 21 февраля 2012

Хотя ваш вопрос немного сбивает с толку, похоже, проблема в том, что Gesture :: getPoints () возвращает вектор, а не ссылку на вектор, поэтому он на самом деле возвращает копию во внутренний вектор, и изменение его делаетне изменять сам объект жеста.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...