簡體   English   中英

通過QList附加和迭代

[英]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()之外,我還嘗試了以下方法,但是它沒有用:

  • myList.push_back(“ zoe”);
  • myList <<“ zoe”;
  • myList + =“ zoe”;

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM