我尝试将指向对象的指针添加到QVector,但是稍后访问QVector时,它似乎为空。
这是该代码的精简版本,其中的问题是Villain类的QVector为Minion *。
void Widget::mainFunction()
{
int totalMinions = 5;
for(int i = 0; i < totalMinions; i++)
{
evilOrganisation.getVillain().addMinion();
}
for(int i = 0; i < totalMinions; i++)
{
qDebug() << "Minion " << i << " Has " << evilOrganisation.getVillain().getMinion(i)->getNumItems()<< " items";
}
}
最终目标是从每个仆从中获得物品数量
#include <QObject>
#include "villain.h"
class EvilOrganisation : public QObject
{
Q_OBJECT
public:
explicit EvilOrganisation(QObject *parent = 0);
Villain getVillain(){return villain;}
private:
Villain villain;
};
__
#include <QVector>
#include "minion.h"
class Villain
{
public:
Villain();
void addMinion(){minions.append(new Minion());}
Minion* getMinion(int i){return minions.at(i);}
private:
QVector<Minion*> minions;
};
addMinion()成功追加了1个Minion *,但是下次调用该函数时却为空。
getMinion(int i)使程序崩溃,因为minions.at(i)不存在。
错误消息在哪里-QVector :: at中的ASSERT失败:“索引超出范围”
#include <QObject>
class Minion : public QObject
{
Q_OBJECT
public:
explicit Minion(QObject *parent = 0);
int getNumItems(){return items;}
private:
int items = 1;
};
那么为什么minions.append(new Minion())似乎可以正常工作,但是每次我尝试访问它时,minions QVector却显示为空?
最佳答案
您必须实现Villain
复制构造函数。每次调用EvilOrganisation::getVillain()
时,您都会得到一个类成员的副本-Villain
对象,该对象默认情况下包含一个空的 QVector`。
另一个想法是像这样返回对您的Villain
的引用
Villain& getVillain() {
return villain;
}
关于c++ - 创建和访问指向QObject的指针的QVector的元素,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46762786/