I want to be able to pass an array with a bound less than max size to a constructor and initialize private data member. The problem is I either get error: invalid initializer for array member 'option Program::long_options [10]' or error: no matching function for call to 'Program::Program(const char [8], option [4], const char [5])'. The only option is to pad out the array I'm passing to the constructor with useless entries.
class Program
{
public:
Program(const char* pn, const option (&lo)[MAX_OPTS], const char* os);
private:
option long_options[MAX_OPTS];
};
Program::Program(const char* pn, const option (&lo)[MAX_OPTS], const char* os)
: program_name(pn), long_options(lo), opt_string(os)
{
}
option ex_lo[] = {
{ "help", no_argument, nullptr, 'h' },
{ "verbose", no_argument, &helpdata.verbose_flag, 1 },
{ "output", required_argument, nullptr, 'o' },
LONG_OPTION_ZEROS
};
Program example("example", ex_lo, "hvo:");
I have also tried using a vector but run into the same problem:
std::vector<option> long_options;
};
Program::Program(const char* pn, option (&lo)[MAX_OPTS], const char* os)
: program_name(pn), long_options{std::begin(lo), std::end(lo)}, opt_string(os)
{
}
std::vectororstd::array