2016-05-10 7 views
1

次のシグネチャを持つGtk :: Application :: createメソッドを呼び出そうとしています。私のC++ 11のコードではそうGtk createメソッドへの引数の送信

create(int& argc, char**& argv, const Glib::ustring& application_id = Glib::ustring(), Gio::ApplicationFlags flags = Gio::APPLICATION_FLAGS_NONE); 

は私が書いた:

char *argv[] = {"arg1", "arg2", nullptr}; 
int argc = 2; 
auto app = Gtk::Application::create(argc, argv, "org.gtkmm.example"); 

しかし、私はこのエラーを取得しています:

no known conversion for argument 2 from ‘char* [3]’ to ‘char**&’ 

ここで何が間違っているの?

答えて

0

Gtk::Application::createは、ポインタの左辺値であることをその引数ので、あなたのargvニーズを変更します。

char *args[] = {"arg1", "arg2", nullptr}; 
char** argv = args; 
int argc = 2; 
auto app = Gtk::Application::create(argc, argv, "org.gtkmm.example"); 

配列がポインタ左辺値ではありません。それはポインタに崩壊しますが、そのポインタはprvalueです。

文字列リテラルをchar*として使用できることに依存しているので、上記は間違いであることに注意してください。代わりに3段階のプロセスを使用する必要があります。

std::string[] args = {"arg1", "arg2"}; 
char* argp[] = {&args[0][0], &args[1][0], nullptr}; 
char** argv = argp; 
int argc = 2; 
auto app = Gtk::Application::create(argc, argv, "org.gtkmm.example"); 
関連する問題