通过引用将 int 数组传递给构造函数

passing array of int to constructor by reference

我正在使用 C++ 编写 AVR 程序

为了使用更少的内存,我想通过构造函数将指向预定义 int 数组的指针传递给 class 成员,以使用 OOP

访问数组

我不能在构造函数中定义这个数组,因为它是一个库 class 并且这个数组及其大小将在使用这个库的其他程序中改变 class

代码:

class A
{
    private:
        const unsigned char arr[];
        unsigned char arrSize;
    public:
        A(const unsigned char arr[],unsigned char arrSize)
        {
            this->arr = arr;
            this->arrSize=arrSize;
        }
};

编译时出现下一个错误:

incompatible types in assignment of 'unsigned char*' to 'unsigned char [0]

我知道我做错了什么,但我不知道到底错在哪里以及如何解决它。

您不能分配给 const,即使在构造函数中也不行。相反,您需要使用“:”语法在构造函数的开头初始化常量:

A(const unsigned char Arr[],unsigned char arrSize) : arr{Arr}

根据您的评论,您只需要一个指向数组的指针。为此,您只需要在 class 中添加一个指针。它应该看起来像

class A
{
    private:
        const unsigned char* arr; // just use a pointer here
        unsigned char arrSize;
    public:
        A(const unsigned char arr[],unsigned char arrSize) : arr(arr), arrSize(arrSize) {}
        //                    ^^^^^ this decays to a const unsigned char*
};

我要提醒您,这种设计可能存在问题。如果 class 对象比它指向的数组寿命更长,并且您使用指针,那么您将有未定义的行为,因为您不再知道 space 中的内容。