通过QList追加和迭代

时间:2012-02-17 20:00:27

标签: c++ qt

我的QList包含指向类的指针。我试图迭代QList,但它的所有元素似乎只包含我分配给QList的最后一个指针。

代码:

QList<fooClass*> myList;

fooClass *pNewFooA = new fooClass("Bob");
myList.append(pNewFooA);

fooClass *pNewFooB = new fooClass("Jen");
myList.append(pNewFooB);

fooClass *pNewFooC = new fooClass("Mel");
myList.append(pNewFooC);

QList<fooClass*>::iterator i;
for (i = myList.begin(); i != myList.end(); i++) {
    cout << (*i)->getName() << "\n";
}

输出:

Mel
Mel
Mel

我没有使用.append(),而是尝试了以下操作,但它不起作用:

  • myList.push_back( “佐爱”);
  • myList&lt;&lt; “佐伊”;
  • myList + =“zoe”;

fooClass.cpp

QString name = "";

QString fooClass::getName()
{
    return name;
}

fooClass::fooClass(QString newName)
{
    name = newName;
}

2 个答案:

答案 0 :(得分:4)

根据您显示的代码,您的name全球变量。这意味着, name所有实例的程序中只有一个 fooClass变量。每次执行

name = newName;

您更改该变量的值。

如果您希望每个fooClass都有自己的名称,则应将name fooClass变量成员设为:

class fooClass
{
public:
    //some stuff here
private:
    QString name;
};

答案 1 :(得分:1)

问题不在您的列表中,在标题中将fooClass的名称设为私有成员。应该是那样的

class fooClass{
public:
  fooClass(QString newName);
  QString getName();
private:
  QString name;
};

从cpp中删除全局变量名。无论如何,你不需要用“”初始化QString。