2016-05-10 41 views
1

我想調用具有以下簽名的Gtk :: Application :: create方法。發送參數到Gtk創建方法

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

所以在我的C++代碼11我寫道:

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");