Russian Qt Forum

Qt => Общие вопросы => Тема начата: PulSar.CE3194694 от Август 24, 2010, 14:38



Название: [Решено] lvalue required as left operand of assignment - Как бороться?
Отправлено: PulSar.CE3194694 от Август 24, 2010, 14:38
Вылезла данная ошибка: lvalue required as left operand of assignment. Вот здесь:
Код
C++ (Qt)
ListOfdx.value(currIndex)=dx;
ListOfdx - это список из элементов типа double. В одном месте программы пытаюсь присвоить элементу под номером currIndex величину dx (тоже double), а вылезает такая вот штука. Тоже происходит, если делать вот это:
Код
C++ (Qt)
ListOfMatrix.value(currIndex).dx()=value;
Как лечить?


Название: Re: lvalue required as left operand of assignment - Как бороться?
Отправлено: Авварон от Август 24, 2010, 14:45
Код:
ListOfdx[currIndex] = dx;


Название: Re: lvalue required as left operand of assignment - Как бороться?
Отправлено: Sancho_s_rancho от Август 24, 2010, 15:00
Попытка присвоить возвращаемому значению(rvalue).


Название: Re: lvalue required as left operand of assignment - Как бороться?
Отправлено: PulSar.CE3194694 от Август 24, 2010, 15:46
Потрясающе! Мои знания растут! ;D ;D
Хм, не помню, где это было написано, чтобы писать в квадратных скобках. Или мы его просто как массив считаем? И почему .value() не подходит?)


Название: Re: lvalue required as left operand of assignment - Как бороться?
Отправлено: Авварон от Август 24, 2010, 15:53
потому что value возвращает T а operator[] возвращает T&
Разницу чуете?


Название: Re: lvalue required as left operand of assignment - Как бороться?
Отправлено: PulSar.CE3194694 от Август 24, 2010, 16:08
Кстати вот здесь это не прокатывает:
Код
C++ (Qt)
ListOfMatrix[currIndex].dx()=value;


Название: Re: lvalue required as left operand of assignment - Как бороться?
Отправлено: Авварон от Август 24, 2010, 16:14
та же ошибка


Название: Re: lvalue required as left operand of assignment - Как бороться?
Отправлено: PulSar.CE3194694 от Август 24, 2010, 16:18
Тогда как исправить?


Название: Re: lvalue required as left operand of assignment - Как бороться?
Отправлено: Авварон от Август 24, 2010, 16:21
а) добавить возвращение ссылки в dx()
б) сделать метод setDx(T value)
выбирайте. 2е более правильно


Название: Re: lvalue required as left operand of assignment - Как бороться?
Отправлено: PulSar.CE3194694 от Август 24, 2010, 16:54
Рисовать слот ради какой-то фигни не вариант. Нужно как-то по другому. Вон в QPointF сделали же rdx(), че тут нельзя было? >:(


Название: Re: lvalue required as left operand of assignment - Как бороться?
Отправлено: Авварон от Август 24, 2010, 17:58
вы разницу между слотом и сеттером знаете?
вообще, какие классы используются? кто такая матрица? QTransform?


Название: lvalue required as left operand of assignment - Как бороться?
Отправлено: PulSar.CE3194694 от Август 24, 2010, 20:53
Код
C++ (Qt)
QList<QMatrix> ListOfMatrix;
Разница? Нет. Где прочитать?


Название: Re: lvalue required as left operand of assignment - Как бороться?
Отправлено: BRE от Август 24, 2010, 20:57
Код
C++ (Qt)
ListOfMatrix[ currIndex ].translate( dx, dy );
 



Название: Re: lvalue required as left operand of assignment - Как бороться?
Отправлено: PulSar.CE3194694 от Август 25, 2010, 11:22
Как присвоить значение вот здесь:
Код
C++ (Qt)
ListOfAxisXright[CurrentIndex].p2().rx()/=LW;
Оно у меня не присваивается. Код компилируется норм. Не знаю, что делать, если писать .x(), то вылезет та самая ошибка. Причем если присваивать значение вот сюда, то оно присвоится:
Код
C++ (Qt)
ListOfValues[CurrentIndex]=SomeValue;
Т.е. если после закрывающей скобки не писать через точку методы, как, например в первом случае, то все ОК. Как быть?


Название: Re: lvalue required as left operand of assignment - Как бороться?
Отправлено: Авварон от Август 25, 2010, 11:27
выучить с++ блин! Прочтите про разницу между передачей по значению и по ссылке. Дело не в скобочках, а в том, что эти методы возвращают


Название: Re: lvalue required as left operand of assignment - Как бороться?
Отправлено: PulSar.CE3194694 от Август 25, 2010, 13:05
Какой код нужно писать, чтобы работало? Спасибо, прочту.


Название: Re: lvalue required as left operand of assignment - Как бороться?
Отправлено: Авварон от Август 25, 2010, 13:10
Код
C++ (Qt)
ListOfMatrix[ currIndex ].translate( dx, dy );
 


Название: Re: lvalue required as left operand of assignment - Как бороться?
Отправлено: PulSar.CE3194694 от Август 25, 2010, 13:28
Нет, нет, с этим уже разобрался, вот с этим:
Код
C++ (Qt)
ListOfAxisXright[CurrentIndex].p2().rx()/=LW;
Чтобы присваивало. Пробовал setX() использовать, создавал временные переменные, куда сохранял ListOfAxisXright[CurrentIndex], и откуда хотел менять координату x второй точки, но она не менялась.


Название: Re: lvalue required as left operand of assignment - Как бороться?
Отправлено: BRE от Август 25, 2010, 13:31
Как описана переменная ListOfAxisXright?


Название: Re: lvalue required as left operand of assignment - Как бороться?
Отправлено: Авварон от Август 25, 2010, 13:35
телепатирую - это список QLineF


Название: Re: lvalue required as left operand of assignment - Как бороться?
Отправлено: BRE от Август 25, 2010, 13:43
Код
C++ (Qt)
ListOfAxisXright[CurrentIndex].setP2( QPointF( ListOfAxisXright[CurrentIndex].p2().x() / LW, ListOfAxisXright[CurrentIndex].p2().y() );


Название: Re: lvalue required as left operand of assignment - Как бороться?
Отправлено: PulSar.CE3194694 от Август 26, 2010, 10:48
Низкий поклон :)