0

这是我在这个网站上的第一个问题,但我会尽量涵盖所有需要的内容。抱歉,如果我忘记了什么。我在使用 QT Creator 时遇到了这个问题,但我想使用 Visual Studio 或一般来说只是 C++ 会是一样的。

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

除了将行编辑中的文本分配给 Track 对象的变量“艺术家”之外,表单还将发出一个发送整个对象的信号。我的主窗口中的一个插槽将对该信号作出反应并收集 Track 对象。到现在为止还挺好。

这是我的问题。在我的 mainwindow-header 中,我创建了一个名为 trackVector 的私有 QVector,然后我可以在我的 mainwindow.cpp 中调用它。我想要做的是使用该 Track-object 附加/push_back QVector。有点像这样:

trackVector.push_back(trackObject);

我在构建应用程序时收到以下错误消息: 单击此处获取屏幕截图

现在当然有了整数或任何其他变量,这非常简单。我想你会做这样的事情:

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

我认为,每当您附加 QVector(或标准的非 QT 向量)时,您都需要使用该类的构造函数来执行此操作。但是我怎样才能创建一个构造函数,你可以在其中放置一个已经存在的对象?

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

4

1 回答 1

1

您发布的代码不足(因此您的帖子可能会因为偏离主题而关闭——这是 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.

于 2016-05-31T17:32:22.767 回答