将Gtkmm程序划分为函数(第1部分)
Divide Gtkmm program into functions (part 1)
我知道这似乎是一个非常基本的问题,但实际上,由于指针、作用域和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++是很难的。
相关文章:
- "error: no matching function for call to"构造函数错误
- 什么时候调用组成单元对象的析构函数
- 继承函数的重载解析
- 为什么随机数生成器不在void函数中随机化数字,而在main函数中随机化
- C++模板来检查友元函数的存在
- 递归函数计算序列中的平方和(并输出过程)
- 对RValue对象调用的LValue ref限定成员函数
- C++17复制构造函数,在std::unordereded_map上进行深度复制
- 将数组作为参数传递给函数安全吗?作为第三方职能部门,可以探索他们想要的之外的其他元素
- 函数指针类型和值的部分类专用化
- 在类体外部定义的成员函数上的 sfinae
- C++结构成员函数定义如果在结构体外部定义,则它们会有所不同
- 当我只对比较部分值感兴趣而不能假设另一部分的默认构造函数时,如何使用 std::lower_bound
- 函数体内部的 typedef 是一种糟糕的编程实践吗?
- 成员函数体内部的类成员访问
- 无法从我的 Add 函数之外的链表头部获取数据
- 链表,对将节点添加到链表头部的函数感到困惑
- 模板函数转换为结构体内部的函数指针
- 从结构体内部调用成员函数指针所指向的函数
- 在结构体内部定义operator()函数