【发布时间】:2017-10-16 04:05:25
【问题描述】:
我尝试将指向对象的指针添加到 QVector,但是当我稍后访问 QVector 时,它似乎是空的。
这是代码的精简版本,其中 Villain 类具有 Minion* 的 QVector。
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";
}
}
最终目标是获取每个minion的物品数量
#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* 但下次调用该函数时 minions 为空。
getMinion(int i) 使程序崩溃,因为 minions.at(i) 不存在。 错误消息在哪里 - QVector::at: "index out of range" 中的 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 都显示为空?
【问题讨论】: