2012-02-17 103 views
4

My 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( “佐爱”);
  • myList < <“zoe”;
  • myList + =“zoe”;

fooClass.cpp

QString name = ""; 

QString fooClass::getName() 
{ 
    return name; 
} 

fooClass::fooClass(QString newName) 
{ 
    name = newName; 
} 
+1

你为什么要在'QList '上创建你的迭代器而不是'QList '? – talnicolas 2012-02-17 20:03:29

+0

对不起,我的意思是QList 。我只是改变了我的原始代码的几个名字,所以它更容易理解:) – Jon 2012-02-17 20:05:39

+1

我们需要您的'fooClass'声明至少 – Lol4t0 2012-02-17 20:06:52

回答

4

根据你的代码表明,你的name全球变量。这意味着,它是只有一个name变量在您的程序中全部fooClass的实例。并且每次执行时

name = newName; 

您更改了该变量的值。

如果希望每个fooClass有自己的名字,你应该让你的name可变构件的fooClass这样的:

class fooClass 
{ 
public: 
    //some stuff here 
private: 
    QString name; 
}; 
+0

哦,哈哈。我知道了。那就是诀窍。谢谢 :) – Jon 2012-02-17 20:19:53

1

的问题是不是在你的清单,让您的fooClass的名字私有成员在标题。应该是这样的

class fooClass{ 
public: 
    fooClass(QString newName); 
    QString getName(); 
private: 
    QString name; 
}; 

并从cpp中删除全局变量名称。无论如何你都不需要用“”来初始化QString。