[英]Creating and accessing elements of a QVector of pointers to QObjects
我嘗試將指向對象的指針添加到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;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.