【问题标题】:Divide Gtkmm program into functions (part 1)将 Gtkmm 程序划分为函数(第 1 部分)
【发布时间】:2015-10-08 15:27:30
【问题描述】:

我知道这似乎是一个非常基本的问题,但实际上它并不明显,因为它使用了指针、范围和 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);
}

【问题讨论】:

  • 如果我提出问题的方式有问题,请在评论中告诉我。没有理由的投反对票根本没有帮助。
  • 你试过编译吗?
  • 第一个编译完美,第二个不工作......这就是我寻求帮助的原因。
  • 您能发布编译器发出的任何消息吗?
  • 另外,仅仅说“不起作用”会让人们很难帮助你。我们不知道您在运行构建的代码时是否遇到了一些编译问题或问题。

标签: c++ function variables scope gtkmm


【解决方案1】:

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

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

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

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

【讨论】:

  • 我认识几个人,他们对“加速 C++:通过示例进行实用编程”有很好的经验,但之后您必须学习 C++11。 amazon.com/gp/product/020170353X/…
  • 好的,感谢您的回答,不要被视为苛刻...您能否推荐一本书,可以帮助您获得处理此类问题所需的知识。因为我读过一些 C++ 书籍,但它们要么太基础,要么太高级。
  • 好的,感谢您的快速回答。我一定会找这本书的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-01-20
  • 1970-01-01
  • 1970-01-01
  • 2017-01-21
  • 2018-06-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多