【问题标题】:Why do I get the compile error, "make_managed" is not a member of 'Gtk'?为什么我得到编译错误,“make_managed”不是“Gtk”的成员?
【发布时间】:2018-11-16 09:23:41
【问题描述】:

我正在尝试重现该示例 - 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);

Netbeans IDE 也在同一行显示错误

“无法解析标识符 make_managed”

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

我还没有在 Stackoverflow 上发现任何此类问题! 为什么我会收到此编译错误?

请帮忙。

【问题讨论】:

标签: c++ compiler-errors gtkmm


【解决方案1】:

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

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

我的解决方案

我在/usr/include/gtkmm-3.0/gtkmm/object 中添加make_managedcode

template<class T, class... T_Args>
auto make_managed(T_Args&&... args) -> T* // Note: Edited to add return type here!
{
  return manage(new T(std::forward<T_Args>(args)...));
}

【讨论】:

  • 注意:如果你试图复制过去一些例子,你可能会调用Gtk::make_managed...为此,你还应该将函数包装在命名空间 Gtk 中。
  • 使用我的 vcpkg 树中包含的 gtkmm 3.22.2-2 进行相同的观察。函数定义已被删除。插入此代码再次将其公开为 Gtk:: 命名空间的成员。
【解决方案2】:

@GAVD 提供并由@Ayxan 编辑的答案是正确的。

将由该答案链接的object.h 文件放在包含您的源代码的目录中。


在另一个 #include \&lt;gtkmm-whatevers\&gt; 之前添加一个 #include "object.h"
make_managed 函数应该可以解析。当 gtkmm 的更新版本永久修复问题时,请确保删除此临时修复。

或者按照您当地的程序更新 /usr/include/gtkmm-3.0/gtkmm/object.h

我发现我还必须添加编译器标志-std=c++14-std=gnu++14,因为make_managed 函数使用自动类型的方式。添加编译器标志会将预期的 C++ 语言级别从默认更改为 2014 标准。

【讨论】:

    【解决方案3】:

    只是编译下页给出的例子:

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

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

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

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

    【讨论】:

      猜你喜欢
      • 2021-04-09
      • 1970-01-01
      • 2012-08-31
      • 1970-01-01
      • 2023-03-09
      • 1970-01-01
      • 2014-02-23
      • 2022-01-23
      • 1970-01-01
      相关资源
      最近更新 更多