Russian Qt Forum

Программирование => С/C++ => Тема начата: phpCoder от Апрель 06, 2015, 12:02



Название: Не приравнивает указатели
Отправлено: phpCoder от Апрель 06, 2015, 12:02
Есть код:
Код
C++ (Qt)
class NumericalValuesFormatter : public QDialog
{
   Q_OBJECT
   friend class RegExpEdit;
   class RegExpEdit;
public:
   explicit NumericalValuesFormatter(QWidget *parent = 0);
   ~NumericalValuesFormatter() {}
private:
   ...
   RegExpEdit *lastEdit;
   ...
};
 
class RegExpEdit : public QLineEdit
{
   Q_OBJECT
public:
   explicit RegExpEdit(NumericalValuesFormatter *parent) : QLineEdit(parent), _dialog(parent) {}
   ~RegExpEdit() {}
private:
   NumericalValuesFormatter *_dialog;
protected:
   void focusInEvent(QFocusEvent)
   {
       _dialog->lastEdit = this; //че не так?
       _dialog->isTable = false;
   }
};

При компиляции парит:
Код:
ошибка: cannot convert 'RegExpEdit*' to 'NumericalValuesFormatter::RegExpEdit*' in assignment
     void focusInEvent(QFocusEvent) { _dialog->lastEdit = this; _dialog->isTable = false; }

Что делать?


Название: Re: Не приравнивает указатели
Отправлено: Old от Апрель 06, 2015, 12:07
Уберите из класса Numerical... строку:
class RegExpEdit;

перенесите её перед объявлением класса.


Название: Re: Не приравнивает указатели
Отправлено: phpCoder от Апрель 06, 2015, 12:21
Спасибо, работает.
Странно, в других классах конструкция
Код:
class Trololo;
работает и в приватной секции.


Название: Re: Не приравнивает указатели
Отправлено: Old от Апрель 06, 2015, 12:26
Оно всегда работает одинаково. :)
Внутри класса вы определяет указатель на
NumericalValuesFormatter::RegExpEdit

а присвоить пытаетесь адрес объекта
RegExpEdit

Они немного отличаются. :)


Название: Re: Не приравнивает указатели
Отправлено: __Heaven__ от Апрель 06, 2015, 12:50
Они немного отличаются. :)
Точнее говоря, один из них (что внутри NumericalValuesFormatter) не имеет членов вообще :)