无法在具有恒定可变大小的类中创建堆栈分配的数组

问题描述 投票:0回答:3

为什么此代码无法编译?

class MyClass
{
    const int size = 5;
    int arr[size];
};

错误表明size是未声明的标识符。

c++ arrays class const
3个回答
3
投票

默认成员初始化器(代码中的= 5;)仅指定如何初始化非静态数据成员默认。构造函数could为其赋予不同的值。因此,编译器不能知道在编译时其值是什么。

因此,不能在编译时常量表达式中使用A::size。就像您声明数组的大小一样。

如果您希望每个Asize为5,则该变量应为constexpr static成员。或在注释中建议为std::array<..., 5>


1
投票

声明数组时,您需要一个常量表达式来表示大小。

设置大小static将解决您的问题

class MyClass
{
    const static int size = 5;
    int arr[size];
};

通常,由于大小是固定的,因此您更希望使用std::array。您可以选择将大小作为模板参数。

template <std::size_t N>
class MyClass
{
    std::array<int, N> arr;
};

-1
投票

这是因为size是非静态的,并且您试图“静态地”访问该常量(即没有对象)。

© www.soinside.com 2019 - 2024. All rights reserved.