Этот код берет координаты с помощью мыши и создает новую вершину;C++ Указатели/Ссылки
void DrawingWidget::mousePressEvent(QMouseEvent *event){
if(getCurrentState()==ADD_VERTEX){
x=event->x();
y=event->y();
Vertex p1 {&x,&y};
m_mainWindow->addVertex(p1);
update();
}
}
Вот Vertex код класса:
class Vertex {
public:
float *x = 0;
float *y = 0;
Vertex() = default;
Vertex(float *nx, float *ny);
};
Все Verces проводятся в списке:
QList<Vector2> vertexList;
И AddVertex (Vertex вершина):
addVertex(Vertex vertex){
vertexList << vertex;
}
В основном первый добавление вершин отлично работает, но когда Я пытаюсь добавить вторую вершину (используя данный метод), вместо этого меняются первые координаты вершин.
NB! Координаты класса Vertex являются намеренно указателями, потому что, используя другой метод, я меняю свои координаты.
Что мне не хватает?
Re: «Координаты класса Vertex намеренно указываются, потому что, используя другой метод, я меняю свои координаты». - Чего ждать? Ничего о том, что вы только что описали, требует, чтобы указатели 'x' и' y' были 'float'. Честно говоря, 'x' и' y' действительно должны быть просто непосредственными членами 'Vertex', если вы хотите использовать здравый код. –
Ничто не говорит о том, что после завершения функции переменная 'event' не изменится, и вы сохраните указатели на ее значения. Либо вы будете указывать на последние значения, либо в конце концов укажете на значения мусора/освобожденную память. Речь идет о компиляторе/ОС. Резюме: не делайте этого. – Dave
Рассмотрите возможность добавления геттеров/сеттеров в «Вершину» и манипулирования координатами с помощью этих методов, вместо того, чтобы хранить указатель на какую-либо внешнюю область действия, которая может изменить эти координаты неизвестным образом или даже привести к недействительности этих указателей, что приведет к сбою. Ваша текущая реализация требует неприятностей, она небезопасна, подвержена ошибкам и плохо разработана в целом. –