Russian Qt Forum
Ноябрь 23, 2024, 15:41 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Не получается изменить значение переменной  (Прочитано 6556 раз)
Егор
Гость
« : Декабрь 24, 2014, 18:28 »

Всё это, конечно, очень смешно, но не могу изменить значение private переменной.
Есть класс Element, в котором объявлены private переменные:
Код:
private:
    int direction, coordX, coordY;
В другом классе Snake создаётся объект класса Element, который помещается в список elements:
Код:
elements.insert(0, Element(2, 5, 1));
Получить данные я могу, а вот изменить их значения - нет. Вот код метода и его вызова:
Код:
void setX(int value);
______________________________
void Element::setX(int value){
    coordX=value;
}
______________________________
snake->getElement(i).setX(snake->getElement(i).getX()+1);   //Метод getElement возвращает i-й элемент списка, тоесть, объект типа Element. Пытался даже передать туда обычное число, всё равно не меняется.
В чём, *****, дело)?
Записан
gil9red
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 1805



Просмотр профиля WWW
« Ответ #1 : Декабрь 24, 2014, 18:33 »

А покажите get-функцию
Записан

Егор
Гость
« Ответ #2 : Декабрь 24, 2014, 18:38 »

А покажите get-функцию
Код:
int Element::getX(){
    return coordX;
}

Я даже пытался отправить туда просто число. Это тоже не сработало.
« Последнее редактирование: Декабрь 24, 2014, 18:40 от Егор » Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4747



Просмотр профиля WWW
« Ответ #3 : Декабрь 24, 2014, 18:40 »

snake->getElement(i) возвращает копию объекта Element
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
Егор
Гость
« Ответ #4 : Декабрь 24, 2014, 18:43 »

snake->getElement(i) возвращает копию объекта Element
Через указатель сделать, или просто сделать список public и обращаться непосредственно к элементу списка?

P.S указатель не дал результата, хотя, скорее всего, я где-то опять ошибся.
Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4747



Просмотр профиля WWW
« Ответ #5 : Декабрь 24, 2014, 19:34 »

через указатель должно правильно работать. можешь и класс змеи показать.
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
Егор
Гость
« Ответ #6 : Декабрь 24, 2014, 19:42 »

через указатель должно правильно работать. можешь и класс змеи показать.
Код:
#ifndef SNAKE_H
#define SNAKE_H
#include <QPixmap>
#include "element.h"

class Snake
{
public:
    //QList<Element> elements;
    Snake(QString wayToFile);
    QPixmap getElementPix();
    int getLength();
    Element getElement(int index);
    ~Snake();

private:
    QPixmap elementPix;
    int length;
    int speed;
    QList<Element*> elements;
};

#endif // SNAKE_H

________________________________________________________________--
#include "snake.h"

Snake::Snake(QString wayToFile):
    elementPix(QPixmap(wayToFile)),
    length(3)
{
    elements.insert(0, new Element(2, 5, 1));
    elements.insert(1, new Element(1, 5, 1));
    elements.insert(2, new Element(0, 5, 1));
}

QPixmap Snake::getElementPix(){
    return elementPix;
}

int Snake::getLength(){
    return length;
}

Element Snake::getElement(int index){
    return *elements[index];
}

Snake::~Snake()
{
}

Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4747



Просмотр профиля WWW
« Ответ #7 : Декабрь 24, 2014, 19:43 »

Element *Snake::getElement(int index){
    return elements[index];
}
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
Егор
Гость
« Ответ #8 : Декабрь 24, 2014, 19:55 »

Element *Snake::getElement(int index){
    return elements[index];
}
Большое спасибо, всё нормально работает. А подобное написание метода я вообще видел впервые, так что за новые знания тоже спасибо.
Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4747



Просмотр профиля WWW
« Ответ #9 : Декабрь 24, 2014, 19:58 »

тут же ничего такого нету: просто возвращаешь указатель на элемент. можно например и так писать: Element* Snake::getElement(int index){
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
Егор
Гость
« Ответ #10 : Декабрь 25, 2014, 18:22 »

тут же ничего такого нету: просто возвращаешь указатель на элемент. можно например и так писать: Element* Snake::getElement(int index){
Ну, просто раньше как-то не приходилось возвращать указатели. А сам я пробовал вернуть, написав *elements[index].
Записан
gil9red
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 1805



Просмотр профиля WWW
« Ответ #11 : Декабрь 25, 2014, 18:30 »

тут же ничего такого нету: просто возвращаешь указатель на элемент. можно например и так писать: Element* Snake::getElement(int index){
Ну, просто раньше как-то не приходилось возвращать указатели. А сам я пробовал вернуть, написав *elements[index].

Через * возвращалась копия объекта.
У вас в списке хранятся указатели на объект, поэтому * была лишняя. Да и семантика функции подразумевала возврат объекта, а не указателя на него Улыбающийся
Записан

Егор
Гость
« Ответ #12 : Декабрь 26, 2014, 15:34 »

тут же ничего такого нету: просто возвращаешь указатель на элемент. можно например и так писать: Element* Snake::getElement(int index){
Ну, просто раньше как-то не приходилось возвращать указатели. А сам я пробовал вернуть, написав *elements[index].

Через * возвращалась копия объекта.
У вас в списке хранятся указатели на объект, поэтому * была лишняя. Да и семантика функции подразумевала возврат объекта, а не указателя на него Улыбающийся
Да, теперь я всё понял. Спасибо за пояснение.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.154 секунд. Запросов: 23.