我嘗試將對象指針添加到QVector,但是當我稍後訪問QVector時,它看起來是空的。創建和訪問指向QObject的QVector指針的元素
這裏是一個精簡版的代碼,其中的惡棍類有一個Q的向量*。
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爪牙*但下一次的功能所謂的奴才是空的。
getMinion(int i)因爲minions.at(i)不存在而崩潰程序。 當錯誤消息是 - ASSERT失敗QVector ::在:「索引超出範圍」
#include <QObject>
class Minion : public QObject
{
Q_OBJECT
public:
explicit Minion(QObject *parent = 0);
int getNumItems(){return items;}
private:
int items = 1;
};
那麼,爲什麼minions.append(新爪牙())似乎工作,但爪牙QVector顯示爲空每我試圖訪問它嗎?
謝謝bkausbk這就是我一直在尋找的答案。我確信我在Minion課上做錯了事,但現在我明白了。 – workdamnit