2012-02-17 223 views
4

我有一个QList,我已经插入了对象指针。我正试图遍历这个QList来读取这些对象的名称。每当我这样做时,我都会得到这些对象的地址,与读取对象名称本身相反。我想知道如何能够读取对象名称而不是地址?获取对象指针指向

QList<MyObject*> newObjectList; 
QList<MyObject*>::iterator i; 

MyObject *pNewObject = new MyObject(name); 
MyObject.append(pNewObject); 

for (i = newObjectList.begin(); i != newObjectList.end(); i++) { 
    cout << "\n" << *i << "\n"; 
} 

回答

3

当您解除引用i时,您需要调用该函数以从您的对象中获取该名称。类似这样的:

for (i = newObjectList.begin(); i != newObjectList.end(); i++) { 
    // i right now is the iterator, and points to a pointer. So this will need to be 
    // dereferenced twice. 
    cout << "\n" << (*i)->getName() << "\n"; 
} 
+0

谢谢。它的工作:)有没有其他使用箭头符号( - >)? – Jon 2012-02-17 18:43:56

+0

你可以用*:'(*(* i))。getName();' – 2012-02-17 18:50:12

+0

非常感谢:) – Jon 2012-02-17 18:56:20

2

当你derenference迭代I(即*i)你AA参考MyObject*类型的对象,这是一个指针,你必须取消引用再次,要想让你的对象的引用:

*(*i) 
+1

'** i'就够了,括号是没有必要的。 – Fanael 2012-02-17 18:40:19

+0

我刚刚通过将行更改为“cout <<”\ n“<< *(* i)<<”\ n“;”但我得到了错误“C678:二进制'<<':找不到运算符类型'QTextStream'的左手操作数(或没有可接受的转换)” – Jon 2012-02-17 18:41:24