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

时间:2015-10-08 15:27:31

标签: c++ function variables scope gtkmm

我知道这似乎是一个非常基本的问题,但实际上它并不是显而易见的,因为使用了指针,范围和GTK特定类型的变量等。我真的无法找到答案。

我必须将Gtkmm程序的GUI相关部分划分为函数,但似乎有些错误。

为了说清楚,这是一个例子,CODE1.cpp中有WORKING代码,它必须分成类似于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);
}

1 个答案:

答案 0 :(得分:1)

我猜你的问题是没有出现Gtk :: Label。那是因为:

a)您正在函数范围内将其创建为局部变量,然后在函数末尾释放它。也许你的意思是使用new(使用Gtk :: manage())并返回Gtk :: Label *而不是Gtk :: Label。

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

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