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