#include <argp.h>
#include <iostream>
#include <vector>
#include <string>
#include <cstring>
#include <cerrno>
using namespace std;
namespace arg_pars
{
struct Res {double ext{-1}; vector<string> datfiles;};
static argp_option options = {"ext", 'e', "{1 | 2 | 2.6 | 4.2}", 0, "level"};
static error_t cb(int key, char *arg, struct argp_state *state)
{
switch (key)
{
case 'e':
/**/
break;
case ARGP_KEY_ARG:
reinterpret_cast<Res*>(state->input)->datfiles.emplace_back(arg);
break;
case ARGP_KEY_SUCCESS:
break;
default:
return ARGP_ERR_UNKNOWN;
}
return 0;
}
static argp parser = {&options, cb};
}
int main(int argc, char **argv)
{
arg_pars::Res res;
error_t er = argp_parse(&arg_pars::parser, argc, argv, 0, NULL, &res);
cout << "ok\n";
}
$ g++ t.cpp -std=c++14 $ ./a.out Ошибка сегментирования $ g++ --version g++ (Gentoo 5.4.0-r3 p1.3, pie-0.6.5) 5.4.0 x32
Если вместо vector<string> использовать struct D{char[20]}; vector<D> datfiles; например, то всё нормально. Ошибка комплилятора, верно?