gpt4 book ai didi

C++ 指针作用域问题

转载 作者:行者123 更新时间:2023-11-30 02:35:30 24 4
gpt4 key购买 nike

我遇到了一些 C++ 作用域问题,我不知道为什么。通过公开所有内容,我从原始问题中简化了很多。有人能帮我理解为什么 vec 在 main 的末尾为空吗?我如何让 Get1stVec(...) 将 vec 实际设置为不会立即被销毁的东西?

class Vec2
{
public:
float x, y;
Vec2(float x_, float y_) : x(x_), y(y_) {}
Vec2() : x(0.0f), y(0.0f) {}
};

class Polygon
{
public:
void AddVertex(Vec2 vert) { verts.push_back(vert); }
std::vector<Vec2> verts;
};

void Get1stVec(Polygon* poly, Vec2* vec)
{
Vec2* tmp = &poly->verts.at(0); // tmp gets a valid pointer here.
vec = tmp;
}

int _tmain(int argc, _TCHAR* argv[])
{
Polygon poly;
poly.AddVertex(Vec2(1.0f, 1.0f));
Vec2* vec = nullptr;
Get1stVec(&poly, vec);
vec->x = 2.0f; // vec is nullptr here. Why?
return 0;
}

最佳答案

void Get1stVec(Polygon* poly, Vec2* vec)

修改vec 的本地拷贝,而不是main 中的变量vec。它们是不同的变量。

您可以改为传递引用,或者重新设计并删除所有那些无用的指针。

关于C++ 指针作用域问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33552212/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com