Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/147.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 创建和访问QObject指针的QVector元素_C++_Qt_Qvector - Fatal编程技术网

C++ 创建和访问QObject指针的QVector元素

C++ 创建和访问QObject指针的QVector元素,c++,qt,qvector,C++,Qt,Qvector,我尝试将指向对象的指针添加到QVector,但当我稍后访问QVector时,它似乎是空的 下面是一个代码的精简版本,其中的问题是反派类的QVector为Minion* void Widget::mainFunction() { int totalMinions = 5; for(int i = 0; i < totalMinions; i++) { evilOrganisation.getVillain().addMinion(); }

我尝试将指向对象的指针添加到QVector,但当我稍后访问QVector时,它似乎是空的

下面是一个代码的精简版本,其中的问题是反派类的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";
    }
}
void小部件::mainFunction()
{
int totalMinions=5;
对于(int i=0;iqDebug()方法getVillain返回一个Villain的副本。所以每次你有一个空的QVector。还有一个内存泄漏。你不管理仆从向量指针


你应该在堆上创建反派()或通过引用返回对象。

方法getVillain返回反派的一个副本。所以每次你有一个空的QVector。还有内存泄漏。你不管理minions向量指针


您应该在堆上创建反派()或通过引用返回对象。

您必须实现
反派
复制构造函数。每次调用
反派::getVillain()
时,您将获得类成员的副本-
反派
对象,默认情况下包含一个空的
QVector`

另一个想法是只返回一个对你的
反派的引用,比如

Villain& getVillain() {
    return villain;
}

您必须实现
Villain
copy构造函数。每次调用
getVillain()
时,您将获得类成员的一个副本-
Villain
对象,默认情况下该对象包含一个空的
QVector`

另一个想法是只返回一个对你的
反派的引用,比如

Villain& getVillain() {
    return villain;
}

谢谢你,这正是我一直在寻找的答案。我确信我在我的仆从课上做错了什么,但现在我明白了。谢谢你,这正是我一直在寻找的答案。我确信我在我的仆从课上做错了什么,但现在我明白了。
#include <QObject>

class Minion : public QObject
{
    Q_OBJECT
public:
    explicit Minion(QObject *parent = 0);

    int getNumItems(){return items;}

private:
    int items = 1;
};
Villain& getVillain() {
    return villain;
}