【问题标题】: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找到。

【问题讨论】:

    标签: c++ vector


    【解决方案1】:

    C2DPointSet 似乎有构造函数和析构函数,但没有复制构造函数和复制赋值运算符,即 C2DPointSet 不遵循the rule of three。如果 C2DPointSet 有指针成员,这是有问题的。可以?然后它天生就坏了。它只是不适用于向量。

    【讨论】:

      【解决方案2】:

      可能取决于 C2DPointSet 类的内容。可能你那里没有复制构造函数。我的建议是有一个引用向量而不是实际对象的向量。这样,您还将最大限度地减少开销。所以你应该有 vector 线,而不是你所拥有的。尝试一下。它可能会起作用。

      【讨论】:

      • @FredOverflow 你可能是对的。然后只是一个指针向量(例如 std::vector 行。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-04-24
      • 1970-01-01
      • 1970-01-01
      • 2015-01-23
      • 2020-05-22
      • 1970-01-01
      相关资源
      最近更新 更多