2016-05-10 10 views
1

Ich versuche, Gtk :: Application :: create-Methode, die die folgende Signatur hat aufrufen.Senden von Argumenten an die Gtk create-Methode

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

Also in meinem C++ 11-Code schrieb ich:

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

Aber ich bin immer diese Fehlermeldung:

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

Was stimmt hier nicht?

Antwort

0

Gtk::Application::create modifiziert seine Argumente, so dass Ihre argv Bedürfnisse ein Zeiger L-Wert sein:

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

Ein Array ist kein Zeiger L-Wert; es verfällt zu einem Zeiger, aber dieser Zeiger ist ein Pr-Wert.

Beachten Sie, dass das Oben genannte immer noch falsch ist, da es in der Lage ist, ein Zeichenfolgenliteral als char* zu verwenden. Sie sollten stattdessen einen 3-Schritt-Prozess verwenden:

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