向 Gtk create 方法发送参数

Sending arguments to the Gtk create method

我正在尝试调用具有以下签名的 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");

数组不是指针左值;它衰减为一个指针,但该指针是一个纯右值。

请注意,以上内容仍然不正确,因为它依赖于能够将字符串文字用作 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");