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

Gtk4函数gtk_builder_new_from_string返回类型引发编译错误的问题求助

Gtk4函数gtk_builder_new_from_string返回类型引发编译错误的问题求助

我最近在使用Gtk4的gtk_builder_new_from_string函数时遇到了一个头疼的问题——它返回的类型和我预期的不一致,直接导致编译失败,想请各位帮忙分析下原因。

先给大家看看我的C++代码片段:

#include <iostream>
#include <string>
#include <typeinfo>
#include <gtk/gtk.h>
#include <FileUtils.hpp>

using namespace std;

// 省略部分代码

int main(void)
{
    string       xmlString;
    GtkBuilder * builder_p = NULL;

    readWholeFileIntoString("c:\\users\\craig\\Documents\\simple.ui", &xmlString);
    builder_p = gtk_builder_new_from_string(xmlString.c_str(), xmlString.length());

    cout << "Type of builder_p = " << typeid(builder_p).name() << endl;

    if (GTK_IS_BUILDER(builder_p))
    {
        // 下面这行代码在编译时出问题!注释掉它的话代码就能正常编译运行
        builder_p->get_objects();
    }

    return 0;
}

这段代码放在InvokeBuilder.cpp文件里,用Visual Studio 2022自带的C++编译器搭配nmake编译时,弹出了如下错误:

InvokeBuilder.cpp
InvokeBuilder.cpp(89): error C2027: use of undefined type '_GtkBuilder'
c:\msys64\mingw64\include\gtk-4.0\gtk/gtktypes.h(39): note: see declaration of '_GtkBuilder'
NMAKE : fatal error U1077: '"C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.30.30705\bin\HostX64\x64\cl.exe"' : return code '0x2'
Stop.

我顺着提示去看了gtktypes.h的第39行,发现只有这么一行:

typedef struct _GtkBuilder             GtkBuilder;

也就是说_GtkBuilder只是一个前向声明,并没有给出结构体的具体定义。另外我也查了gtk_builder_new_from_string的函数声明,不管是官方文档还是gtkbuilder.h头文件里,它的返回值确实是GtkBuilder*类型。

奇怪的是,如果我把builder_p->get_objects();这行注释掉,代码就能正常编译运行,运行时输出的内容是:

Type of builder_p = struct _GtkBuilder * __ptr64

这说明函数确实返回了一个64位的_GtkBuilder指针,但我就是没法直接访问它的成员函数。我试过用类型转换之类的方法,但都没效果。

现在我有几个疑问想请教大家:

  • 是不是我对Gtk的使用有什么误解,漏掉了关键的步骤?
  • 要不要自己编译最新版的Gtk4来解决这个问题?
  • 会不会是Visual Studio编译器的兼容性问题?用GCC编译会不会就没这个问题?
  • 这类问题是不是更适合去Gtk的官方邮件列表提问?

另外提前说明:我不想换成gtk_builder_new_from_file函数,希望能解决当前使用gtk_builder_new_from_string遇到的问题。

备注:内容来源于stack exchange,提问作者Craig Sanders

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.22 08:53:00