繁体   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