我正尝试在-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上问过任何这样的问题! 为什么会收到此编译错误?
请帮助。
答案 0 :(得分:1)
Gtk::make_managed
在gtkmm-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)...));
}
}
并且示例已成功编译(无需修改标准文件)