Добавление и повторение через QList - PullRequest
5 голосов
/ 18 февраля 2012

Мой 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"; </li>
  • myList + = "zoe";

fooClass.cpp

QString name = "";

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

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

Ответы [ 2 ]

4 голосов
/ 18 февраля 2012

В соответствии с кодом, который вы показали, ваша name является глобальной переменной. Это означает, что это только одна name переменная в вашей программе для всех экземпляров fooClass. И каждый раз, когда вы выполняете

name = newName;

вы меняете значение этой переменной.

Если вы хотите, чтобы каждый fooClass имел свое имя, вы должны сделать свой name переменный член fooClass следующим образом:

class fooClass
{
public:
    //some stuff here
private:
    QString name;
};
1 голос
/ 18 февраля 2012

Проблема не в вашем списке, сделайте имя приватным членом вашего fooClass в шапке.Должно быть так

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

И удалить глобальную переменную name из cpp.В любом случае вам не нужно инициализировать QString с "".

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...