2012-02-17 3 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

+0

Вы можете просто сделать две разметки с помощью *: '(* (* i)). GetName();' –

+0

Спасибо большое :) – Jon

2

При derenference итератор я (т.е. *i), вы аа ссылку на объект типа MyObject*, который является указателем, вы должны разыменования, что снова, чтобы получить ссылку на ваш объект:

*(*i) 
+1

'** i' достаточно, скобки не нужны. – Fanael

+0

Я просто попробовал это, изменив строку на «cout <<" \ n "<< * (* i) <<" \ n ";" но я получил ошибку «C678: двоичный« << »: оператор не найден, который принимает левый операнд типа« QTextStream »(или нет приемлемого преобразования)« – Jon

Смежные вопросы