최대 크기보다 작은 바운드가있는 배열을 생성자에 전달하고 개인 데이터 멤버를 초기화 할 수 있기를 원합니다. 문제는 error: invalid initializer for array member 'option Program::long_options [10]'
또는 error: no matching function for call to 'Program::Program(const char [8], option [4], const char [5])'
입니다. 유일한 방법은 쓸모없는 항목으로 생성자에 전달하는 배열을 패딩하는 것입니다.어떻게 생성자에서 배열을 초기화합니까?
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:");
는 또한 벡터를 사용하여 시도했지만 같은 문제로 실행 한 :
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 :: vector' 또는'std :: array' –