Я конвертирую свое приложение, чтобы его можно было использовать в качестве библиотеки. Для этой цели я хочу предложить возможность передать вектор строк в стандартную программу запуска библиотеки.C++: vector <string> to char **
Проблема, с которой я сталкиваюсь, на самом деле создает char**
. Это моя текущая реализация, закомментированы в источнике, так как он не работает:
IceTea* IceTea::setupCli(vector<string> strings) {
int argc=strings.size(), i=0;
char* argv[argc];
vector<string>::iterator it;
for(it=strings.begin(); it != strings.end(); ++it) {
argv[i++] = (char*)it->c_str();
}
// Pass the char** to the original method.
return this->setupCli(argc, argv);
}
Я получаю ошибку:
src/IceTea.cpp:132:18: error: no matching member function for call to 'setupCli'
return this->setupCli(argc, argv);
~~~~~~^~~~~~~~
src/IceTea.h:44:13: note: candidate function not viable: no known conversion from 'char *[argc]' to 'const char **' for 2nd argument
IceTea* setupCli(int, const char**);
^
src/IceTea.cpp:124:17: note: candidate function not viable: requires single argument 'strings', but 2 arguments were provided
IceTea* IceTea::setupCli(vector<string> strings) {
_'char * argv [argc]; '_ VLA не являются стандартными C++ –
Как вы объявили вторую функцию' setupCli() '? –
Можете ли вы показать подпись функции с двумя аргументами? – marom