2015-10-08 26 views
-3

我知道这似乎是一个非常基本的问题,但实际上它不是明显的,因为使用了指针,范围和GTK特定类型的变量等。我真的无法找到答案。将Gtkmm程序划分为函数(第1部分)

我必须将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

如果我提出问题的方式有问题,请在评论中告诉我。没有理由的倒退无助于你。 – Ffff

+0

你试过编译它吗? –

+0

第一个编译完美,第二个不工作...这就是为什么我要求帮助。 – Ffff

回答

1

我猜你的问题是,基于GTK ::标签不显示。这是因为:

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

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

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

+0

我认识了几个有过“加速C++:实例编程实践”经验的人,尽管之后你将不得不学习C++ 11。 http://www.amazon.com/gp/product/020170353X/ref=as_li_tl?ie=UTF8&camp=1789&creative=390957&creativeASIN=020170353X&linkCode=as2&tag=murrayswebpages&linkId=WPRF5SV6UEIUEIQC – murrayc

+0

好的,谢谢你的回答,不要认为是苛刻的...您会善意推荐一本能够帮助您获得这类工作所需的知识的书籍。因为我已经阅读了一些C++书籍,但它们要么太简单,要么太先进。 – Ffff

+0

好的,谢谢你的快速回答。我一定会找这本书的。 – Ffff