Russian Qt Forum

Программирование => С/C++ => Тема начата: ManOfOrange от Январь 31, 2011, 16:25



Название: Дружественный класс (friend class)
Отправлено: ManOfOrange от Январь 31, 2011, 16:25
Здравствуйте!

Вопрос скорее по С++, чем по Qt.

есть четыре файлика: timef.h, timef.cpp, leftframe.h и leftframe.cpp - и, соответственно, два класса: timeF и leftFrame. Необходимо сделать класс leftFrame дружественным к timeF для доступа к переменным (private и  protected).
Пишу следующее:

timef.h (с вырезанными кусками, чтобы место не занимать)
Код:
#ifndef TIMEF_H
#define TIMEF_H

#include <QLabel>

#include <QtGui/QFrame>

#include "leftframe.h"

class leftFrame;

namespace Ui {
    class timeF;
}

class timeF : public QFrame {
    Q_OBJECT
    
    friend class leftFrame;

public:
    timeF(QWidget *parent = 0);
    ~timeF();

protected:
    
    void paintEvent (QPaintEvent *event);

private:
    Ui::timeF *m_ui;

    //Переменные
    QString header;
};

#endif // TIMEF_H

leftFrame.h
Код:
#ifndef LEFTFRAME_H
#define LEFTFRAME_H


#include "timef.h"
#include <QWidget>

class timeF;

class leftFrame : public QWidget
{
public:
    leftFrame(QWidget *parent=0);

protected:
    void paintEvent(QPaintEvent* event);

private:
    int leftCoordX;
};

#endif // LEFTFRAME_H

leftframe.cpp
Код:
#include "leftframe.h"

#include <qpainter.h>
#include "timef.h"

class timeF;

leftFrame::leftFrame(QWidget* parent)
{
}

void leftFrame::paintEvent(QPaintEvent*)
{
    QPainter painter(this);

    painter.drawText(header);

     painter.end();
}

Соответственно, ругается и не собирается.
`header' undeclared (first use this function)

Подскажите, пожалуйста, что сделано не так и где исправить :-)


Название: Re: Дружественный класс (friend class)
Отправлено: Hellraiser от Январь 31, 2011, 16:37
В timef.h добавить
Код:
#include <QString>


Название: Re: Дружественный класс (friend class)
Отправлено: ManOfOrange от Январь 31, 2011, 16:45
Добавил. Ничего не изменилось.


Название: Re: Дружественный класс (friend class)
Отправлено: SABROG от Январь 31, 2011, 16:46
В timef.h добавить
Код:
#include <QString>
Думаю дело в другом. У него член класса header находится в классе timeF, который наследует QFrame. Но класс leftFrame почему-то наследует QWidget, в котором, естественно, нет члена header.


Название: Re: Дружественный класс (friend class)
Отправлено: ManOfOrange от Январь 31, 2011, 17:03
О, проблему решил. Я затупил, пытаясь использовать переменные, не юзая объект класса timeF...

Всем спасибо :-)