Почему я получаю ошибку компиляции, make_managed не является членом Gtk? - PullRequest
0 голосов
/ 16 ноября 2018

Я пытаюсь воспроизвести пример в - https://developer.gnome.org/gtkmm-tutorial/stable/sec-treeview-examples.html.en#treeview-dnd-example

Ошибка времени компиляции:

"make_managed" не является членом Gtk в файле treeview_withpopup.cc в строке auto item = Gtk :: make_managed ("_ Edit", true);

Среда IDE Netbeans также показывает ошибку в той же строке

"Невозможно разрешить идентификатор make_managed"

Я скопировал код с сайта, и файл gtkmm.h включен в заголовочный файл.

Я не нашел такого вопроса в Stackoverflow! Почему я получаю эту ошибку компиляции?

Пожалуйста, помогите.

Ответы [ 2 ]

0 голосов
/ 18 февраля 2019

Ответ, предоставленный @GAVD и отредактированный @Ayxan, является правильным.

Поместите файл object.h, связанный с этим ответом, в каталог с вашим исходным кодом.


Добавьте #include "object.h" перед другим #include \<gtkmm-whatevers\>.
Функция make_managed должна разрешиться. Убедитесь, что вы удалили это временное исправление, когда обновленная версия gtkmm исправляет проблему навсегда.

Или следуйте местным процедурам для обновления /usr/include/gtkmm-3.0/gtkmm/object.h

Я обнаружил, что мне также пришлось добавить флаг компилятора -std=c++14 или -std=gnu++14 из-за того, что функция make_managed использует тип auto. Добавление флага компилятора изменяет ожидаемый уровень языка C ++ по умолчанию на стандарт 2014 года.

0 голосов
/ 25 декабря 2018

Gtk::make_managed определено в gtkmm-3.0/gtkmm/object.h (см. ссылка ).

Я уже получил ту же ошибку. Затем я проверил файл object.h, но функции make_managed нет. Я не знаю почему. Я только что установил из пакета rpm (я использовал ОС Fedora 23).

Мое решение :

Я добавляю код из make_managed в /usr/include/gtkmm-3.0/gtkmm/object:

template<class T, class... T_Args>
auto make_managed(T_Args&&... args)
{
  return manage(new T(std::forward<T_Args>(args)...));
}
...