2017-06-08 43 views
0

何かを作成するのにGTK3を使っています。チュートリアルでは、gtk_init関数を呼び出す必要がありますが、main関数から呼び出す必要はありません - C++

#include <gtk/gtk.h> 
int main(int argc, char* argv[]) 
{ 
    GtkWidget *window; 
    gtk_init(&argc, &argv); 

gtk_window, gtk_container etc... 

このメイン機能外の図面を処理するメインプログラムを作成したいと考えています。だから私は上記のコードを削除し、新しいものを作る:

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ファイルをオーバーロードしないようにしようとしています:)

+0

'argc'と' argv'をすべて 'MainSystem()'に渡す必要があります。あるいは、両方の引数に 'NULL'を渡してください。 GTL +がそれ自身のコマンドライン引数のセットをチェックするだけです。GLib APIを使用するつもりがない場合は、それを破棄します。いずれにせよ、選択はあなたのものです。これが何を意味するのか分からなければ、GTK +を学ぶ前にC++を学ぶ必要があります。 – andlabs

+0

@andlabs MainSystem()とは何ですか?それを教えてもらえますか? –

+0

これはタイプミスです。私は 'initSystem()'を意味しました。 – andlabs

答えて

0

私のアプリケーションを表示するために2つの機能を入れているのを忘れて、MainProgram.cppファイルに表示されています。その 'ファイル'の最後の数行。

関連する問題