c++指针/引用
C++ Pointers/References
这段代码从鼠标点击中获取坐标并创建一个新的顶点;
void DrawingWidget::mousePressEvent(QMouseEvent *event){
if(getCurrentState()==ADD_VERTEX){
x=event->x();
y=event->y();
Vertex p1 {&x,&y};
m_mainWindow->addVertex(p1);
update();
}
}
下面是顶点类代码:
class Vertex {
public:
float *x = 0;
float *y = 0;
Vertex() = default;
Vertex(float *nx, float *ny);
};
所有顶点都保存在list中:
QList<Vector2> vertexList;
And addVertex(Vertex顶点):
addVertex(Vertex vertex){
vertexList << vertex;
}
基本上第一个顶点添加工作完美,但当我试图添加第二个顶点(使用给定的方法),第一个顶点坐标改变而不是。
注!顶点类的坐标故意是指针,因为通过使用另一种方法我改变了它们的坐标。
我错过了什么?
x
和y
在您的代码中可能是DrawingWidget
的字段,而在Vertex
中,您总是存储指向相同变量(这些字段)的指针。所以在vertexList
中,指向相同字段的指针总是相同的值。
我不明白你为什么对你的代码行为感到惊讶。
你的问题中的代码和你观察到的行为暗示你有这样的东西:
class DrawingWidget
{
public:
void mousePressEvent(QMouseEvent *event);
private:
float x;
float y;
// ...
};
当函数mousePressEvent()
被调用时,你给这些成员分配了新的坐标:
void DrawingWidget::mousePressEvent(QMouseEvent *event){
if(getCurrentState()==ADD_VERTEX){
x=event->x();
y=event->y();
...
所以每次你按下鼠标,你都在覆盖旧的坐标。现在,这可能不是一个问题,但是由于您添加到列表中的 Vertex
s包含指向这些类成员的指针,而不是简单地存储坐标的副本,第一个顶点似乎已经更改了坐标。
class Vertex
{
public:
Vertex() : x(0.0f), y(0.0f) {}
Vertex(float x, float y) : x(x), y(y) {}
float getX() const { return x; }
float getY() const { return y; }
void setX(float x) { this->x = x; }
void setY(float y) { this->y = y; }
private:
float x; // NOT pointers!
float y;
};
class DrawingWidget
{
public:
void mousePressEvent(QMouseEvent *event);
private:
//float x; // Not needed!
//float y;
// ...
};
void DrawingWidget::mousePressEvent(QMouseEvent *event) {
if(getCurrentState()==ADD_VERTEX) {
Vertex p1{event->x(), event->y()};
m_mainWindow->addVertex(p1);
update();
}
}
相关文章:
- C++取消引用指针.为什么会发生变化
- 深层复制具有自引用指针的类
- Visual c ++,使用字符串引用/指针调用 dll 函数
- std::unordered_map::提取引用/指针失效
- 为什么在引用指针时将 const 放在 & 符号的左侧有效,而在右侧则无效?
- 区分接受常量参数的函数引用/指针和与函数参数同名的非常量参数
- 如何在 c++ 中使用带有数学运算的引用/指针?
- 了解通过引用传递取消引用指针时C++堆/堆栈分配
- 取消引用指针并立即为其分配变量,导致分段错误
- 如何获取指向类(而不是对象)的引用/指针
- 将类型参数传递给自引用指针
- 我应该如何定义返回指针的函数?(引用指针与指针指针)
- 在析构函数内取消引用指针时出现分段错误
- 来自引用指针的内存泄漏
- 引用指针后面的值
- 无法取消引用指针
- 引用指针调用成员函数
- 未定义的引用指针的变量模板在clang中功能,而不是GCC
- 取消引用指针以创建数组的副本
- 有关启动引用指针的引用的问题