我知道这似乎是一个非常基本的问题,但实际上它并不是显而易见的,因为使用了指针,范围和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);
}
答案 0 :(得分:1)
我猜你的问题是没有出现Gtk :: Label。那是因为:
a)您正在函数范围内将其创建为局部变量,然后在函数末尾释放它。也许你的意思是使用new(使用Gtk :: manage())并返回Gtk :: Label *而不是Gtk :: Label。
b)您不使用函数的返回值。 main()函数中没有labela变量。
我并不是说听起来很苛刻,但你需要阅读编译器警告,你需要阅读初学者的C ++书。通过猜测或希望它像其他语言(如Java)一样,很难学习C ++。