通过引用将 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 中的内容。
我正在使用 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 中的内容。