[英]Appending and Iterating Through QList
我的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;
}
根據顯示的代碼,您的name
是全局變量。 這意味着,對於fooClass
所有實例,它只是程序中的一個 name
變量。 每次執行
name = newName;
您更改該變量的值。
如果希望每個fooClass
都有其自己的名稱,則應使您的name
變量成為fooClass
成員, fooClass
所示:
class fooClass
{
public:
//some stuff here
private:
QString name;
};
問題不在您的列表中,請在標頭中將名稱設為fooClass的私有成員。 應該這樣
class fooClass{
public:
fooClass(QString newName);
QString getName();
private:
QString name;
};
並從cpp中刪除全局變量名稱。 無論如何,您都不需要使用“”來初始化QString。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.