我的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(),而是尝试了以下操作,但它不起作用:
fooClass.cpp
QString name = "";
QString fooClass::getName()
{
return name;
}
fooClass::fooClass(QString newName)
{
name = newName;
}
答案 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。