Указатель на QList — at() vs.[] оператор
Вопрос
У меня возникли проблемы с пониманием некоторых особенностей поведения 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
это то же самое.Кто-нибудь знает, в чем разница?
Спасибо
Решение
Это потому что operator[]
следует применять к QList
объект, но myList
это указатель к QList
.
Пытаться
ABC = (*myList)[i];
вместо.(Кроме того, правильный синтаксис должен быть myList->at(i)
вместо myList.at(i)
.)
Другие советы
Вы, наверное, имели в виду
ABC = (*myList)[i];
myList — это указатель на QList, поэтому его следует использовать как (*myList)[i]
в строке, отмеченной восклицательными знаками.Также вы не можете использовать ABC = myList.at(i)
, вам нужно использовать ABC = myList->at(i)