将对象添加到向量

Adding an object to a vector

本文关键字:向量 添加 对象      更新时间:2023-10-16

这是我在这个网站上的第一个问题,但我会尽力涵盖所需的一切。如果我忘了什么,我道歉。我在使用QT Creator时遇到了这个问题,但我想使用Visual Studio或C++时也会遇到同样的问题。

我有几个课程:主窗口,跟踪和AddForm。主窗口就是它的名称。Track是一个基于QObject的自定义类,它只包含一个QString变量(只是现在,因为我还在试验QT)。AddForm是另一个表单的类,可以通过单击MainWindow表单中的一个按钮来创建。该表单只包含一行用于填充字符串的编辑和一个显示"添加"的按钮。每当按下该按钮时,行编辑中的文本将被放入Track类的QString变量中。这个QString变量被称为"艺术家"。

除了将行编辑中的文本指定给Track对象的变量"artist"之外,表单还将发出一个发送整个对象的信号。我的主窗口中的一个插槽将对该信号作出反应,并收集Track对象。到目前为止还不错。

这是我的问题。在我的主窗口标题中,我创建了一个名为trackVector的私有QVector,然后我可以在我的mainwindow.cpp中调用它。我想做的是用Track对象附加/push_back QVector。有点像这样:

trackVector.push_back(trackObject);

构建应用程序时,我收到以下错误消息:点击此处查看屏幕截图

当然,对于一个整数或任何其他变量,这是非常简单的。我想你会做这样的事情:

QVector<int> myVector;
myVector.push_back(3);

我认为,无论何时附加QVector(或标准的非QT向量),都需要使用该类的构造函数。但是,我如何才能创建一个构造函数,在其中只放入一个已经存在的对象?

由于我不是以英语为母语的人,请尽可能多地用简单的单词解释:)提前谢谢!

您发布的代码不足(因此您的帖子可能会被关闭为脱离主题——这是so上的一个经典初学者错误),但我认为这里合适的解决方案是使用一些自动指针类型。如果您的TrackVector是保留Track对象的所有权,那么最好的解决方案是使用std::unique_ptr<Track>元素:

std::vector<std::unique_ptr<Track>> TrackVector;
// filled like
TrackVector.emplace_back(new Track(args));

另一方面,如果所有权在其他地方,您可以使用std::shared_ptr甚至原始指针(前提是您的布局保证指向Track对象的生存期超过TrackVector的生存期)。