2016-09-16 61 views
0

我使用C++工作程序对AVR传递整型阵列构造通过参考

为了使用较少的内存我想通过指针INT的预定阵列直通构造函数类的成员,使用OOP访问阵列

我不能定义这个数组中的构造,因为它是一个lib类此数组,其大小将在其他程序中使用这个LIB类

代码进行更改:

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; 
     } 
}; 

上了车编译下一个错误:在“无符号字符*”的分配

不兼容的类型为“无符号的char [0]

据我所知,我没有错的财产以后,但我不能意识到什么是错误的以及如何解决它。

+0

所以应该'A'只是指向数组还是它需要拥有数组? – NathanOliver

+0

只是指向数组 –

+0

const只能使用初始化列表进行初始化。 –

回答

2

看你说的,你只需要一个指向数组的意见。要做到这一点,你只需要在你的课堂上有一个指针。它应该看起来像

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* 
}; 

我会告诫你,这种设计可能会有问题。如果类对象超出它指向的数组并且您使用指针,那么您的行为不确定,因为您不再知道该空间中的内容。

+0

因此,我可以在课堂上使用'this-> arr [0]','this-> arr [1]'或类似的代码,或者不使用?即使我不使用'uint',而是使用'struct'或其他任何东西?这与我的任务无关,只是为了理解,谢谢) –

+0

@ E.Monogarov是的,你可以在课堂内使用'this-> arr [0]'或者只是'arr [0]'。 – NathanOliver

+0

它可能不太复杂,因为这个数组在所有的程序运行时间都存在 –

-1

即使在构造函数中,也不能指定const。相反,你需要在与构造的开始初始化常量“:”语法:

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

+0

我不认为这会编译。你需要在编译时指定'arr'成员的大小。你在做那个吗? –