为什么会出现编译错误,“ make_managed”不是“ GTK”的成员?

时间:2018-11-16 09:23:41

标签: c++ compiler-errors gtkmm

我正尝试在-https://developer.gnome.org/gtkmm-tutorial/stable/sec-treeview-examples.html.en#treeview-dnd-example

重现该示例

编译时错误:

  

“ make_managed”不是文件中“ Gtk”的成员   自动项目行上的treeview_withpopup.cc =   Gtk :: make_managed(“ _ Edit”,true);

Netbeans IDE也在同一行显示错误

  

“无法解析标识符make_managed”

我已经从站点复制了代码,并且gtkmm.h包含在头文件中。

我还没有在Stackoverflow上问过任何这样的问题! 为什么会收到此编译错误?

请帮助。

3 个答案:

答案 0 :(得分:1)

Gtk::make_managedgtkmm-3.0/gtkmm/object.h中定义(请参阅此link)。

我已经遇到了相同的错误。然后,我检查了文件object.h,但是没有make_managed函数。我不知道为什么我只是从rpm packge安装的(我使用的是OS Fedora 23)。

我的解决方案

我在make_managed中添加了/usr/include/gtkmm-3.0/gtkmm/object中的code

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

答案 1 :(得分:0)

@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标准。

答案 2 :(得分:0)

只需编译以下页面上给出的示例:

https://developer.gnome.org/gtkmm-tutorial/stable/sec-range-example.html.en

我在examplewindow.cc的顶部添加了以下代码片段(感谢@GAVD)

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

并且示例已成功编译(无需修改标准文件)