【发布时间】:2016-05-31 17:14:38
【问题描述】:
这是我在这个网站上的第一个问题,但我会尽量涵盖所有需要的内容。抱歉,如果我忘记了什么。我在使用 QT Creator 时遇到了这个问题,但我想使用 Visual Studio 或只是一般的 C++ 会是一样的。
我有几个类:Mainwindow、Track 和 AddForm。主窗口就是它的名字。主要形式。 Track 是一个基于 QObject 的自定义类,它只包含一个 QString 变量(只是现在,因为我还在尝试 QT)。 AddForm 是另一个窗体的类,可以通过单击我的 MainWindow 窗体中的按钮来创建。该表单仅包含一个用于填充字符串的单行编辑和一个显示“添加”的按钮。每当按下该按钮时,来自行编辑的文本将被放入 Track 类的 QString 变量中。该 QString 变量称为“艺术家”。
除了将行编辑中的文本分配给 Track-object 的变量“artist”之外,表单还将发出一个发送整个对象的信号。我的主窗口中的一个插槽将对该信号作出反应并收集 Track 对象。到目前为止一切顺利。
这是我的问题。在我的 mainwindow-header 中,我创建了一个名为 trackVector 的私有 QVector,然后我可以在我的 mainwindow.cpp 中调用它。我想要做的是使用该 Track-object 附加/push_back QVector。有点像这样:
trackVector.push_back(trackObject);
我在构建应用程序时收到以下错误消息: click here for a screenshot
当然,对于整数或任何其他变量,这非常简单。我想你会做这样的事情:
QVector<int> myVector;
myVector.push_back(3);
我认为,每当您附加 QVector(或标准的非 QT 向量)时,您都需要使用该类的构造函数来执行此操作。但是我怎样才能创建一个可以放置一个已经存在的对象的构造函数呢?
由于我不是以英语为母语的人,请尽可能用简单的词解释:) 非常感谢!
【问题讨论】:
-
错误表示当向量是
Trackobjects 的向量时,您尝试将 pointer 推送到Track对象(不是指针)。 -
谢谢!因此,您认为只要它不是指针,它就会起作用。你知道如何让它成为非指针吗?
-
要么不将指针传递给
trackAdded函数,要么取消对指针的引用。 -
@MartijnKor -- 如果您决定将其设为
vector<Track>,请确保Track是可安全复制的,即复制这些对象时不会产生副作用。vector将进行复制,如果Track没有正确的复制语义,您将遇到运行时问题。 -
@MartijnKor - 如果这是错误,那么这又回到了我的评论。
vector将制作副本,并且如果您的类已删除制作副本的能力(通过使复制构造函数“删除”),则不能将其放置在向量中。您可以做的一件事是拥有一个指针向量(更好的智能指针),就像您在开始时所做的那样,并提供适当的代码将这样的指针放置在向量中。
标签: c++ qt object vector qvector