You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何解决继承Gtk::Menu时出现的不完整类型无效使用问题?

解决Gtkmm4中继承Gtk::Menu的"invalid use of incomplete type"错误

错误根源

Gtkmm4对应GTK4框架,而GTK4已废弃传统的GtkMenu控件。Gtkmm4中不再提供可直接继承的Gtk::Menu完整定义,你看到的只是头文件中的前向声明——这就是包含gtkmm.h后仍报"不完全类型"错误,且找不到gtkmm/menu.h的原因,该头文件在Gtkmm4中已被移除。

解决方案

改用GTK4推荐的现代菜单实现Gtk::PopoverMenu,具体步骤如下:

1. 修正代码

替换继承类为Gtk::PopoverMenu,并引入正确的头文件:

#include <gtkmm.h>
#include <gtkmm/popovermenu.h>

class AppMenu: public Gtk::PopoverMenu
{
public:
    AppMenu();
};

int main()
{
    printf("Hello world\n");
    return 0;
}

2. 修复编译命令

你的编译命令存在两处错误:

  • 单引号无法执行pkg-config命令,需改用反引号(`)
  • -I参数指定的是目录路径,不能直接写头文件

正确的编译命令:

g++ main.cc `pkg-config --cflags --libs gtkmm-4.0`

补充说明

如果需要实现传统菜单的触发逻辑(比如通过按钮唤起),可搭配Gtk::MenuButton使用,这是GTK4标准的菜单交互方式。

内容的提问来源于stack exchange,提问作者misha

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 04:12:54