如何在构造函数中初始化数组
How do you initialize array in a constructor?
我希望能够将绑定小于最大大小的数组传递给构造函数并初始化私有数据成员。问题是我要么得到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)
{
}
该语言不允许使用另一个数组初始化数组。
int arr1[] = {10, 20};
int arr2[] = arr1 // Not allowed. In this context, arr1 evaluates to `int*`.
这样可以防止类的数组成员变量在初始化项列表中从另一个数组初始化。
填充数组成员变量内容的唯一方法是在构造函数内部逐个设置其元素的值。
您可以对成员变量使用std::vector
或std::array
,以使类更易于实现。
也许不是
option long_options[MAX_OPTS];
使用
option *long_options;
在这种情况下,寿命选项ex_lo[]和Program类的对象必须相等。
附言:对不起我的英语,我正在学习:)
ex_lo
和long_options
是两个不同的数组。你不能把一个变成另一个。
你能做什么:
- 将
lo
复制到long_options
中-或- - 将
long_options
设为指向数组的指针(或者,我认为是引用)。这允许您将赋值保持在构造函数中
以下是初始化构造函数中对象数组的示例:
class B
{
public:
B(int a, int b, int c)
{
std::cout << "Contructing B with " << a << b << c;
}
};
class C
{
public:
C(char a, bool b, std::string c)
{
std::cout << "Contructing C with " << a << b << c;
}
};
class A
{
B m_b[2][2];
C m_c;
A(int a, char b, bool c, std::string d):
m_b{
{
{a,b,30},
{a,b,30}
},
{
{a,b,30},
{a,b,30}
}
},
m_c{b,c,d}
{
std::cout << "Contructing A with " << a << b << c << d << std::endl;
}
};
相关文章:
- 是否可以在编译时初始化数组,以便在运行时不会花费时间?
- 在函数内部的声明中初始化数组,并在外部使用它
- 为什么用结构初始化数组需要指定结构名称
- 有没有一种代码密度较低的方法来使用非默认构造函数初始化数组?
- C++使用另一个数组和新值初始化数组
- 初始化数组、"memset"或" {//value} "的最佳方法是什么?
- 在 constexpr 构造函数中初始化数组是否合法?
- 我可以初始化 const 实例,以便我可以将其用作 const 来初始化数组吗?
- 在构造函数中初始化数组
- 是否可以使用函数返回的值初始化数组
- 使用宏使用额外元素初始化数组
- 在循环中显示不同值的初始化数组
- 如何在macOS中的旧扩展clang和gcc编译器中初始化数组和向量
- 使用可变模板列表初始化数组,并放置new
- 使用函数从 Visual Studio 2017 中的 main 创建和初始化数组
- 使用 c++ 中的函数初始化数组
- 这是使用构造函数初始化数组对象的最佳方法吗?
- C++ 使用变量而不是常量表达式初始化数组
- 在初始化列表中初始化数组的更好方法
- 在可变参数模板类中初始化数组