在c ++中将多维数组初始化为类成员

Posted

技术标签:

【中文标题】在c ++中将多维数组初始化为类成员【英文标题】:Initialize a multidimensional array as a class Member in c++ 【发布时间】:2020-04-19 10:39:46 【问题描述】:

我有一堂课,比如说:

class Foo

    public:

         unsigned int Index;
         float Size;
         Foo(const unsigned int index);
         ~Foo();

    private:
         int Children[2][2];

;

而我想在构造函数中初始化Children参数:

Foo::Foo(const unsigned int index) : Index(index)

    this->Size = 0.5 / index;
    this->Children = ;

    if (index < MAX_DIVS) 
        for (int _x = 0; _x < 2; _x++) 
            for (int _y = 0; _y < 2; _y++) 
                this->Children[_x][_y] = 0;
        

    


我可以将初始值分配给Sizethis-&gt;Size= 0.5/Index,但我无法初始化Children; Visual Studio 在this-&gt;Children = 上给我一个错误说:“表达式必须有一个可修改的左值”。为什么会这样?

【问题讨论】:

你想用this-&gt;Children = ;做什么?这似乎没有必要,因为无论如何你都会覆盖这些值? @UnholySheep 我正在尝试初始化它,因为 VIsual Studio 告诉我运算符 Foo::Foo 没有初始化 Foo::Children 先修正缩进。不能赋值给数组,也不能遍历三个索引的二维数组。 如果你想初始化一个数组,你应该在类声明中有一个默认值或者使用成员初始化列表(就像你已经为Index所做的那样。事实上你的整个构造函数可以被简化至:Foo::Foo(const unsigned int index) : Index(index), Children(), Size(0.5/index) @Fabrizio 数组具有固定大小,因此值初始化数组值初始化其所有元素,从而产生一个全零数组。 【参考方案1】:

作为@L.F.并且@UnholySheep 指出,要为Children 变量设置默认值,应将其添加到成员初始化列表中,如下所示:

Foo::Foo(const unsigned int index) : Index(index), Children(), Size(0.5/index) 

这会将变量 Children 初始化为全 0 数组,然后可以在构造函数中进一步修改。

【讨论】:

以上是关于在c ++中将多维数组初始化为类成员的主要内容,如果未能解决你的问题,请参考以下文章

在 C 中将多维数组作为参数传递

在构造函数中将数组初始化为0 [重复]

初始化静态 const char* 数组

在C ++中初始化一个指向结构的指针数组

在向量大括号初始化中将 C 数组传递给结构初始化程序

在 gcc 中将二维数组初始化为 0 时的值不正确