如何实例化并附加到指向我的对象的指针的 QVector

Posted

技术标签:

【中文标题】如何实例化并附加到指向我的对象的指针的 QVector【英文标题】:how to instantiate and append to a QVector of pointers to my objects 【发布时间】:2015-12-07 05:08:44 【问题描述】:

我需要实例化并附加到指向我的对象的指针的 QVector

我的标题说 QVector<Stuff*> myResults;

通过注释掉内容,我将其范围缩小到我对 QVector 的使用

1) 当我尝试

    myResults.append(stuff);

2) 当我尝试时

    myResults.push_back(stuff);

我明白了

First-chance exception at 0x00007FF652523520 in LibTestd.exe: 0xC0000005: Access violation reading location 0x0000000000000030.

我复制并粘贴了不同的方法来实例化我的 qvector,但无济于事。包括来自 doc.qt.io 的示例,其中 0 和 50 QVector<Stuff> vector(0);

我尝试让 QVector 中的类类型不是指针,以及取消引用的东西。

我真的不知道出了什么问题,但我相当肯定这与我滥用指针有关。有人可以给任何...指针吗? :P

顺便说一句,如果它是相关的,东西翻译单元(我的意思是,同名的 Stuff.h 和 Stuff.cpp 文件(是翻译单元的名称吗?))其中有两个类,Crap 类和 Stuff 类,Stuff 没有废话就不可能存在。我的构造函数中有这样的初始化列表。

顺便说一句,我实例化了这样的东西Stuff * stuff = new Stuff()

【问题讨论】:

myResults 是如何准确定义的? QVector<Stuff*> myResults;? 是的,我尝试过这种方式以及 QVector myResults (然后当我尝试添加它时取消引用的东西) (感谢您让我知道问题上的错字,我会修复它)我也尝试了 QVector myResults; (然后当我尝试添加它时取消引用的东西)和 QVector myResults(0);和 QVector myResults(50);并尝试了 myResults = myResults(QVector(50)) (不在标题中)没有任何工作,这就是为什么我认为它与指针有关,它如何对内存进行分组以及它是否试图复制被指向的对象什么的。 你所拥有的似乎是正确的,你确定是向量导致了异常吗? 超级巨大的金发时刻 >.> 创建尝试使用 Qvector 的类的类...我 aummm,忘记实例化... 羞愧地隐藏了多久这让我很困惑,但是耶!令人困惑的新问题! 【参考方案1】:

没有其余的代码很难提供帮助,但是:

QVector 不尊重其给定的数据,因此在执行时检查myResults 变量的有效性。

是的,我知道它不是一个指针,而是一个类级别的变量,不过,请检查一下,特别是如果您在任何可能运行对象析构函数的线程上使用 processEvents()(或等效项)。

如果您发现 myResults 变量无效(在调试版本中指向 0xfeeefeee + 更多,和/或在“无法读取”内存上,请检查对象的析构函数是否在访问冲突之前运行。

Qt 新手甚至新手使用processEvents() 是很常见的,并且不会重新考虑导致其对象销毁的槽可能会在 processEvents() 调用期间运行。

【讨论】:

【参考方案2】:

超级巨大的金发时刻>。> 创建尝试使用Qvector的类的类......我aummm,忘记实例化它...... *羞愧于这让我困惑了多久* 但是耶!令人困惑的新问题!还有其他问题。

【讨论】:

以上是关于如何实例化并附加到指向我的对象的指针的 QVector的主要内容,如果未能解决你的问题,请参考以下文章

即使我使用指向类型的指针来更新它,我的对象也没有更新

c ++如何获取指向另一个类中的当前对象的指针?

删除指向子类的指针会调用基类析构函数吗?

使用指向对象实例的指针列表的访问冲突

指向数据类型的单个对象/实例的指针的命名

双链接列表上一个实例变量