Vector_push back 不填充向量(c++)
Posted
技术标签:
【中文标题】Vector_push back 不填充向量(c++)【英文标题】:Vector_push back not populating the vector (c++) 【发布时间】:2012-04-07 12:00:33 【问题描述】:我没有收到任何错误消息,只是我的向量没有填充。查看观察列表中的向量,没有任何内容被复制。为什么是这样? 我试过两种方法。 第一个
std::vector<Point3D*> hitpoints;
local_hit_point = sr.local_hit_point; //local_hit_point class Point3D
hitpoints.push_back(local_hit_point);
我尝试使用指针的第二种方式
std::vector<Point3D*> hitpoints;
Point3D* hittingpoint_ptr = new Point3D;
local_hit_point = sr.local_hit_point;
hittingpoint_ptr = &local_hit_point;
hitpoints.push_back(hittingpoint_ptr);
我在我的代码中的其他地方找到了可以工作的向量。我真的只是愚蠢吗,但我似乎无法弄清楚为什么它不起作用。
【问题讨论】:
你怎么知道它没有填充? (请提供源代码) 如果你只有一个,你为什么要使用它?sr.local_hit_point
是否可能实际上是一个 Point3D 数组?在这种情况下,您需要遍历它们并一一添加。
你可以使用hitpoints.size()
查看有多少元素。存储指针时,你确定指向的对象在原地吗?
文森特。当我调试时,我有一个“观察名单”,我可以看到没有任何东西进入生命值。你想要什么源代码? sr.local_hit_point 返回射线撞击物体的 x,y,z 笛卡尔坐标点。向量在一个“for”循环中,我想在每次通过时存储命中点。 Bo Persson,我如何测试指向的对象是否保持原位?
以第二种方式:为什么要创建新点而不是将其均衡到另一个指针..在这种情况下您将丢失该指针..顺便确保您的调试器没有错误-运作..
【参考方案1】:
我最好的猜测是你的调试器有问题..
第一个建议;
清除监视列表中的所有内容,因为它们可以改变执行的行为 再检查一遍。。第二个建议;
创建一个新项目并像上面那样编写一个简单的代码,看看您的向量是否正在填充。如果这个简单的项目有效,您应该向我们提供更多代码和详细信息..【讨论】:
【参考方案2】:只是我的向量没有填充。
它正在填充。不过
查看观察列表中的向量... 我使用了 hitpoint.size()
函数/方法调用的结果(size() 是一种方法)不会在 Visual Studio 监视列表中自动更新(因为你没有告诉你使用什么操作系统/编译器,我不得不假设它是 Visual Studio)。 IE。如果您将函数调用输入到监视列表中,它将计算结果,但在您手动刷新之前不会再次调用函数。代替函数调用,将向量本身添加到监视列表中。
【讨论】:
以上是关于Vector_push back 不填充向量(c++)的主要内容,如果未能解决你的问题,请参考以下文章
Malloc 错误:OpenCV/C++ 而 push_back 向量
c ++ push_back第一个向量和按升序排序向量[关闭]