通过QList进行追加和迭代
Appending and Iterating Through QList
My 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<lt;"zoe"
- myList+="zoe"
fooClass.cpp
QString name = "";
QString fooClass::getName()
{
return name;
}
fooClass::fooClass(QString newName)
{
name = newName;
}
根据您显示的代码,您的name
是全局变量。这意味着,对于fooClass
的所有实例,程序中只有一个name
变量。每次你执行
name = newName;
您可以更改该变量的值。
如果你想让每个fooClass
都有自己的名字,你应该让fooClass
的name
变量成员像这样:
class fooClass
{
public:
//some stuff here
private:
QString name;
};
问题不在您的列表中,请在头中使名称成为fooClass的私有成员。应该像一样
class fooClass{
public:
fooClass(QString newName);
QString getName();
private:
QString name;
};
并从cpp中删除全局变量名。无论如何,您不需要使用"初始化QString。
相关文章:
- 使用std::multimap迭代器创建std::list
- 来自 std::list 的迭代器 .end() 按预期返回"0xcdcdcdcdcdcdcdcd"但 .begin()
- C++中带有List类的迭代器Segfault
- 迭代时从向量和内存中删除对象
- 如何在c++迭代器类型中包装std::chrono
- 带过滤器的现代迭代c++集合
- 在c++中检查长方体是否尽可能快地重叠(无迭代)
- C++矢量迭代
- 集合上的输出迭代器:assign和increment迭代器
- Boost Spirit,获取迭代器内部语义动作
- 擦除while循环中迭代的元素
- 实现一个在集合上迭代的模板函数
- 对于set上的循环-获取next元素迭代器
- 在向量内的向量上迭代
- 为什么output_editor Concept不需要output_e迭代器标记
- TSP递归解的迭代形式
- c++17文件系统::recursive_directory迭代器()在mac上没有给出这样的目录,但在windows上
- 字符串反向迭代器自追加的持久性
- std::list中不带锁的并行追加和迭代
- 通过QList进行追加和迭代