向Gtk-create方法发送参数

Sending arguments to the Gtk create method

本文关键字:参数 方法 Gtk-create      更新时间:2023-10-16

我正在尝试调用具有以下签名的Gtk::Application::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**&’

这里怎么了?

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