我尝试将指向对象的指针添加到 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";
}
}
最终目标是获取每个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 都显示为空?
最佳答案
您必须实现 Villain
复制构造函数。每次 EvilOrganisation::getVillain()
被调用时,您将获得您的类成员的拷贝 - Villain
对象,其中包含一个空的QVector ` 默认情况下。
另一个想法是只返回对你的Villain
的引用
Villain& getVillain() {
return villain;
}
关于c++ - 创建和访问指向 QObject 的指针的 QVector 的元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46762786/