【发布时间】:2017-06-08 02:37:46
【问题描述】:
我正在使用 GTK3 来创建一些东西。在教程中有
#include <gtk/gtk.h>
int main(int argc, char* argv[])
{
GtkWidget *window;
gtk_init(&argc, &argv);
gtk_window, gtk_container etc...
我想创建 MainProgram 来处理这个 main 函数之外的绘图。于是我把上面的代码删掉了,新建一个:
main.cpp
#include "MainProgram.h"
int main(int argc, char* argv[])
{
MainProgram mainProgram;
mainProgram.run(); // the magic is now happening inside this run method
MainProgram.h
#include <gtk/gtk.h>
#include "MainProgram.h"
class MainProgram
{
public:
MainProgram();
~MainProgram();
void run();
void initSystems();
...other not so important code goes inside
最后是 MainProgram.cpp
#include "MainProgram.h"
MainProgram::MainProgram()
{
...
}
MainProgram::~MainProgram(){}
void MainProgram::run()
{
// about that magic we were talking about
initSystems();
}
void MainProgram::initSystems(){
gtk_init(&argc, &argv); // here it is.
_window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
gtk_window_set_position(GTK_WINDOW(_window), GTK_WIN_POS_CENTER);
gtk_window_set_default_size(GTK_WINDOW(_window), _screenWidth, _screenHeigth);
gtk_window_set_title(GTK_WINDOW(_window), "Fill & stroke");
// ************** FIX OF THE PROBLEM
gtk_widget_show_all(_window); // DIDNT CALL
gtk_main(); // These two functions
}
现在当我尝试编译程序时:
g++ main.cpp MainProgram.cpp `pkg-config --cflags --libs gtk+-3.0`
我收到以下警告:
MainProgram.cpp: In member function ‘void MainProgram::initSystems()’:
MainProgram.cpp:22:12: error: ‘argc’ was not declared in this scope
gtk_init(&argc, &argv);
^
MainProgram.cpp:22:19: error: ‘argv’ was not declared in this scope
gtk_init(&argc, &argv);
有没有一种简单的方法可以从 main.cpp 中的 main.cpp 传递这些地址?我这样做是为了让我的代码看起来更干净,并尽量不重载 main.cpp 文件:)
【问题讨论】:
-
您需要将
argc和argv一直传递到MainSystem()。或者只为两个参数传递NULL;它所做的只是让 GTK+ 检查它自己的命令行参数集,如果你不打算为此使用 GLib API,它只会破坏事情。不管怎样,选择权在你。如果你不明白这意味着什么,你需要先学习 C++,然后才能学习 GTK+。 -
@andlabs MainSystem() 是什么?你能告诉我吗?
-
这是一个错字;我的意思是
initSystem()。 -
@andlabs 好的,但是我应该在
MainProgram mainProgram(&argc, &argv)中传递 &argc 和 &argv,重载构造函数并向下传递到 initSystem(),还是可以在mainProgram.run(&argc, &argv)中传递它们?跨度>