Название: Некорректный прототип указателя функции Отправлено: Oaks от Апрель 11, 2013, 15:46 Написал свой класс delegate.h , производный стандартного делегата,добавив переменную myfunc, указатель на функцию :
delegate.h Код: class Delegate : public QItemDelegate Код: delegate.h:50:92: error: 'const' and 'volatile' function specifiers on 'myfunc' invalid in field declaration было: QWidget *(*myfunc)(QWidget *parent, const QStyleOptionViewItem & option, const QModelIndex &index) const; стало: QWidget *(*myfunc)(QWidget *parent, const QStyleOptionViewItem & option, const QModelIndex &index); Компилятор не ругался. Затем в конструкторе класса попытался проинициализировать myfunc: Код: Delegate::Delegate(QObject *parent):QItemDelegate(parent) Код: delegate.cpp: In constructor 'Delegate::Delegate(QObject*)': Название: Re: Некорректный прототип указателя функци Отправлено: mutineer от Апрель 11, 2013, 15:52 у тебя определен указатель на обычную фукнция, а передаешь ты в нее метод класса. Нужно изменить тип указателя на QWidget *(Delegate::*myfunc)(...) const
Инициализация неправильная: myfunc = &Delegate::createEditor; Ну и для вызова по указателю экзепляр класса тоже будет нужен Название: Re: Некорректный прототип указателя функци Отправлено: Oaks от Апрель 11, 2013, 16:28 Ну и для вызова по указателю экзепляр класса тоже будет нужен Не понял,можно подробнее ?Название: Re: Некорректный прототип указателя функции Отправлено: mutineer от Апрель 11, 2013, 16:50 Вот так не вызовется:
myfunc() Надо будет делать например так: (this->*myfunc)(...); Название: Re: Некорректный прототип указателя функци Отправлено: m_ax от Апрель 11, 2013, 16:57 Ну и для вызова по указателю экзепляр класса тоже будет нужен Не понял,можно подробнее ?Название: Re: Некорректный прототип указателя функци Отправлено: Oaks от Апрель 12, 2013, 10:21 Цитировать А какой вообще в этом смысл? Ну, в смысле, зачем понадобился такой указатель? Не проще ли, непосредственно, вызывать метод creatEditor? Это простой, искусственный пример, на котором показана суть проблемы - мое непонимание как работать с таким типом указателей.Название: Re: Некорректный прототип указателя функци Отправлено: m_ax от Апрель 12, 2013, 10:36 Цитировать А какой вообще в этом смысл? Ну, в смысле, зачем понадобился такой указатель? Не проще ли, непосредственно, вызывать метод creatEditor? Это простой, искусственный пример, на котором показана суть проблемы - мое непонимание как работать с таким типом указателей.Например, для вашего случая, это будет выглядеть примерно так: Код
Название: Re: Некорректный прототип указателя функци Отправлено: Oaks от Апрель 12, 2013, 18:13 Цитировать Посмотрите в сторону std::function http://en.cppreference.com/w/cpp/utility/functional/function (http://en.cppreference.com/w/cpp/utility/functional/function) Спасибо за совет.Буду разбираться.Например, для вашего случая, это будет выглядеть примерно так: ... |