将Gtkmm程序划分为函数(第1部分)

Divide Gtkmm program into functions (part 1)

本文关键字:1部 函数 Gtkmm 程序划分      更新时间:2023-10-16

我知道这似乎是一个非常基本的问题,但实际上,由于指针、作用域和GTK特定类型的变量等的使用,它并不是显而易见的。我真的找不到答案。

我必须将Gtkmm程序中与GUI相关的部分划分为函数,但似乎有些不对劲。

为了更清楚地说明,这里有一个例子,CODE1.cpp中有工作代码,它必须被分成类似CODE2.cpp(尚未工作)的东西。

第一个是一个只包含一个标签的窗口,第二个也是一样,但是标签是在函数内部创建的。

错误在哪里?缺少了什么?任何提示或帮助将不胜感激。

代码如下:

CODE1.cpp:

#include <gtkmm.h>
int main (int argc, char *argv[])
{
    Glib::RefPtr<Gtk::Application> app = Gtk::Application::create(argc, argv, "Ejemplo");
    Gtk::Window     ventana;
    Gtk::Label      labela;
    labela.set_text("perrito");
    ventana.add (labela);
    ventana.show_all ();
    return app->run(ventana);
}

CODE2.cpp:

#include <gtkmm.h>
Gtk::Label etiqueta (string x)
{
    Gtk::Label  labela;
    labela.set_text(x);
    return ( labela );
}
int main (int argc, char *argv[])
{
    Glib::RefPtr<Gtk::Application> app = Gtk::Application::create(argc, argv, "Ejemplo");
    Gtk::Window     ventana;
    etiqueta("perrito");
    ventana.add (labela);
    ventana.show_all ();
    return app->run(ventana);
}

我猜你的问题是Gtk::标签没有出现。这是因为:

a)在函数范围内创建它作为局部变量,然后在函数结束时释放它。也许你的意思是使用new(与Gtk::manage()一起)并返回Gtk::Label*而不是Gtk::Label。

b)你没有使用函数的返回值。main()函数中没有labela变量

我不想听起来很刺耳,但是你需要阅读编译器警告,你需要阅读初学者的c++书籍。仅仅通过猜测或希望它像其他语言(如Java)一样来学习c++是很难的。