将对象推入向量的问题
Posted
技术标签:
【中文标题】将对象推入向量的问题【英文标题】:Issue pushing objects into a vector 【发布时间】:2014-05-01 17:19:59 【问题描述】:我正在尝试编写一段代码,该代码获取一个对象并将其推送到向量的背面,但对象没有被正确推送。
我正在编写一个 OpenGL 应用程序,我想在其中画很多线。为了存储这些行,我首先在C2DPointSet
中创建每一行,当我停止绘制时,我想将当前行推入我的行向量中。通过调试代码,我看到推线后向量的长度为0,向量中的同一行有0个点(应该不是这样)。代码如下:
vector <C2DPointSet> lines; //global variables
C2DPointSet line;
//function that runs if a button is pressed and i click in my glwindow
void lineButtonFunction(int x,int y)
C2DPoint currentPoint;
currentPoint=workspacePoint(x,y);//returns point;s cordinates acording to cursorx,y-it works
line.AddCopy(currentPoint);//adds a copy of the given point to obj line
//code that runs when i am done drawing
if(buttons[i].getButtonText()=='L')
lines.push_back(line);
line.DeleteAll();//empties the obj
我不知道问题是什么。使用不同的对象,代码将运行。我不确定,但我认为问题源于推送C2DPointSet
,因为它存储了我喜欢的点数。另外,我观察到,无论我在行中存储多少点,我的大小都是 12。
C2DPoints
和 C2DPointSet
来自 geolib;信息可以在here找到。
【问题讨论】:
【参考方案1】:C2DPointSet 似乎有构造函数和析构函数,但没有复制构造函数和复制赋值运算符,即 C2DPointSet 不遵循the rule of three。如果 C2DPointSet 有指针成员,这是有问题的。可以?然后它天生就坏了。它只是不适用于向量。
【讨论】:
【参考方案2】:可能取决于 C2DPointSet 类的内容。可能你那里没有复制构造函数。我的建议是有一个引用向量而不是实际对象的向量。这样,您还将最大限度地减少开销。所以你应该有 vector 线,而不是你所拥有的。尝试一下。它可能会起作用。
【讨论】:
@FredOverflow 你可能是对的。然后只是一个指针向量(例如 std::vector以上是关于将对象推入向量的问题的主要内容,如果未能解决你的问题,请参考以下文章