Указатель на QList - at () против оператора [] - PullRequest
6 голосов
/ 09 февраля 2010

У меня проблемы с пониманием поведения QList.

#include <QList>
#include <iostream>
using namespace std;

int main()
{
    QList<double> *myList;

    myList = new QList<double>;
    double myNumber;
    double ABC;

    for (int i=0; i<1000000; i++)
    {
        myNumber = i;
        myList->append(myNumber);
        ABC = myList[i]; //<----------!!!!!!!!!!!!!!!!!!!
        cout << ABC << endl;
    }

    cout << "Done!" << endl;
    return 0;
}

Я получаю ошибку компиляции не могу преобразовать "QList" в "double" в назначении в отмеченной строке. Это работает, когда я использую ABC = myList.at(i), но ссылка на QT, кажется, говорит, что at() и [] operator - это одно и то же. Кто-нибудь знает, в чем разница?

Спасибо

Ответы [ 3 ]

9 голосов
/ 09 февраля 2010

Это потому, что operator[] должен применяться к QList объекту , но myList - это указатель на QList.

Попробуйте

ABC = (*myList)[i];

вместо этого. (Кроме того, правильный синтаксис должен быть myList->at(i) вместо myList.at(i).)

3 голосов
/ 09 февраля 2010

myList - указатель на QList, поэтому вы должны использовать его как (*myList)[i] в строке, отмеченной восклицательными знаками. Кроме того, вы не можете использовать ABC = myList.at(i), вы должны использовать ABC = myList->at(i)

3 голосов
/ 09 февраля 2010

Вы, вероятно, имели в виду

ABC = (*myList)[i];
...