Russian Qt Forum

Программирование => С/C++ => Тема начата: Alex_C от Апрель 12, 2012, 10:45



Название: Сбрасывается значение переменной класса
Отправлено: Alex_C от Апрель 12, 2012, 10:45
Опят вопрос касаемо перехода с Дельфи на С++:
есть
Код:
struct SetMapCenter
{
    qreal cLat;
    qreal cLon;
    uint cX;
    uint cY;
    uint r;
};

и объявлена в классе переменная

Код:
class MapWindow : public QObject
{
...
    SetMapCenter m_MapC;
 

при вызове ф-ции класса я ее инициализирую

Код:
void MapWindow::paintMap(QPainter &p, SetMapCenter c)
{
    if(m_MapC.cLat != c.cLat || m_MapC.cLon != c.cLon)
    {
        m_MapC = c;
        if(m_MapC.cLat > -89)
            latlonToXY(90.0, 0.0, m_NorthPole.rx(), m_NorthPole.ry());
        else
        {
            m_NorthPole.rx() = m_cX;
            m_NorthPole.ry() = m_cY - m_r;
        }
        createMap();
    }

    p.drawImage(QPoint(0, 0), *m_Image);
}

Понятно, это нужно для того, чтоб если параметр не изменился - не перерисовывать Image, а просто вывести его.
Запускаю, проверяю - при очередном вызове значения m_MapC "сбрасываются". Вопрос - почему? В Дельфи такой код работает без проблем!


Название: Re: Сбрасывается значение переменной класса
Отправлено: GreatSnake от Апрель 12, 2012, 10:53
В Дельфи такой код работает без проблем!
Странно, что работает, т.к. не видно инициализации SetMapCenter. Т.е. при создании объекта MapWindow в m_MapC будет мусор.


Название: Re: Сбрасывается значение переменной класса
Отправлено: Igors от Апрель 12, 2012, 11:03
Портится в др месте, надо смотреть в отладчике. И не надо все время упоминать о Дельфи, это и так видно из приводимого Вами кода (если хотите - покритикуем  :))


Название: Re: Сбрасывается значение переменной класса
Отправлено: Alex_C от Апрель 12, 2012, 13:07
не видно инициализации SetMapCenter. Т.е. при создании объекта MapWindow в m_MapC будет мусор.

Да, при создании - мусор. Инициализация в ф-ции mapPaint при первом обращении к ней. Т.е. сначала сравниваю - не равно - присвоиваю значания. При втором обращенни с теми же значениями опять смотрю в отладчике, а в m_MapC - мусор.

это и так видно из приводимого Вами кода (если хотите - покритикуем  :))

Очень хочу ))) Потому как сама идеология Qt мне очень нравится и хочу ее не просто тупо копировать, а понять досканально что к чему.


Название: Re: Сбрасывается значение переменной класса
Отправлено: kambala от Апрель 12, 2012, 13:19
добавь конструктор по умолчанию, который будет инициализировать все переменные:
Код
C++ (Qt)
struct SetMapCenter
{
   qreal cLat;
   qreal cLon;
   uint cX;
   uint cY;
   uint r;
 
   SetMapCenter() : cLat(0), cLong(0), cX(0), cY(0), r(0) {}
};


Название: Re: Сбрасывается значение переменной класса
Отправлено: Alex_C от Апрель 12, 2012, 14:01
Все ребят, спасибо за советы!
На будущее учту!
А сейчас понял, почему у меня сбрасывались элементы класса - я тут заигрался наследок-потомок, вот у меня все время новый класс и инициализировался, вот они и сбрасывались!