将对象推送到矢量中

时间:2014-05-01 17:20:00

标签: c++ vector

我正在尝试编写一段代码,它接受一个对象并将其推送到矢量的背面,但是没有正确地推送对象。

我正在编写一个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。

C2DPointsC2DPointSet来自geolib;信息可以找到here

2 个答案:

答案 0 :(得分:2)

C2DPointSet似乎有一个构造函数和一个析构函数,但没有复制构造函数和复制赋值运算符,即C2DPointSet不跟随the rule of three。如果C2DPointSet具有指针成员,则这是有问题的。可以?然后它本身就被打破了。它只是在向量中不起作用。

答案 1 :(得分:0)

可能它取决于C2DPointSet类的内容。可能你没有复制构造函数。我的建议是有一个引用向量而不是实际对象的向量。这样你也可以减少开销。所以你应该有vector&lt;&amp; C2DPointSet&gt;线条,而不是你拥有的。试试吧。它可能会奏效。