2016-05-10 3 views
1

Я пытаюсь вызвать метод Gtk :: Application :: create, который имеет следующую подпись.Отправка аргументов методу Gtk create

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*. Вместо этого вы должны использовать трехэтапный процесс:

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"); 
Смежные вопросы