Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 初始化类构造函数初始化列表中对象数组的第一个条目_C++_Constructor_Initializer - Fatal编程技术网

C++ 初始化类构造函数初始化列表中对象数组的第一个条目

C++ 初始化类构造函数初始化列表中对象数组的第一个条目,c++,constructor,initializer,C++,Constructor,Initializer,如果我有声明类B并实例化其数组的类A class A{ class B{ int x, y; }; B arrB[10]; public: A(); }; 然后,我的问题是,我想使用初始化列表初始化类A中“arrB”的前两个对象: A::A(): arrB[0](1, 2), arrB[1](3, 4) {} 但是编译器不接受它 是否可以初始化数组的特定对象?如果是,怎么做 谢谢问题是B默认情况下将其成员隐藏为private,因为它是类。声

如果我有声明类B并实例化其数组的类A

class A{
    class B{
        int x, y;
    };
    B arrB[10];

 public:
    A();
};
然后,我的问题是,我想使用初始化列表初始化类A中“arrB”的前两个对象:

A::A(): arrB[0](1, 2), arrB[1](3, 4) {}
但是编译器不接受它

是否可以初始化数组的特定对象?如果是,怎么做


谢谢

问题是
B
默认情况下将其成员隐藏为
private
,因为它是
。声明
B
a结构,或将
int x,y
公开为
public
以使用聚合初始化:

class A{
    class B{
        public:
        int x, y;
    };
    B arrB[10] = {{1,2}};

 public:
    A();
};
第二个问题是没有正确使用聚合初始化

A::A(): arrB[0](1, 2), arrB[1](3, 4) {}
应该是

A::A(): arrB{{1, 2}, {3, 4}} {}

为了初始化类成员初始化列表中的数组,需要像初始化函数中的数组一样使用大括号

因此,如果要初始化数组的第一个和第二个元素,则需要至少使用

A() : arrB{{1,2}, {3,4}} {}
正如第一组(
{1,2}
)所说,make
arrB[0]
ab分别初始化为
x
y
,分别初始化为
1
2
。第二组(
{3,4}
)表示make
arrB[1]
ab,其中
x
y
分别初始化为
3
4

但你必须做一件事才能让这一切顺利进行。您需要将
B
设置为公共,并通过将
x
y
设置为公共进行聚合,或者您可以为
B
提供一个构造函数,该构造函数接受值。这样做可以让你

class A{
    class B{
    public:
        int x, y;
    };
    B arrB[10];

 public:
    A() : arrB{{}, {3,4}} {}
};

int main() {
    A a;
}


您需要在初始化列表中而不是只在构造函数函数体中使用此选项吗?可能类似于:
arrB{1,2}、{3,4}、{}、{}、{}、{}、{}、{}、{}、{}、{}、{}、{}、{code>或
arrB{1,2}、{3,4}}
之类的内容,但是其余元素都会获得随机值,并且必须是结构或公共x,y@KIIV:第二种形式很好;其余的元素将被零初始化编译器在第二种形式上抱怨,因为它给出了关于数组项的其余部分的init的错误询问在有问题的编辑之后它将不起作用。它将使用
struct{intx,y;}
class A{
    class B{
        int x, y;
    public:
        B() : x(), y() {} // need this so default instances are value initialized (zeroed in this case)
        B(int x, int y) : x(x), y(y) {}
    };
    B arrB[10];

 public:
    A() : arrB{{}, {3,4}} {}
};

int main() {
    A a;
}