C ++ / Arduino:动态int数组

时间:2010-12-05 13:15:59

标签: c++ arrays class integer arduino

我正在为Arduino写一堂课。到目前为止一直很顺利,但我现在有点卡住......

我在班级中声明了一个int数组

class myClass
{
  public: MyClass(int size);
  private:
    int _intArray[];
};

当我初始化类MyClass myClass1(5)时,我需要将数组看作{0,0,0,0,0}。

我的问题:我需要做什么才能让数组包含“大小”数量的零?

MyClass::MyClass(int size)
{
    //what goes here to dynamically initialize the array
    for(int i=0; i < size; i++) _intArray[i] = 0;
}

编辑:跟进下面的各种回复,Arduino不包含标准库,所以不幸的是std::vector不是一个选项

4 个答案:

答案 0 :(得分:2)

你应该使用std :: vector。

class myCLass {
public:
    myClass(int size)
        : intarray(size) {
    for(int i = 0; i < size; i++) intarray[i] = 0;
    }
private:
    std::vector<int> intarray;
};

答案 1 :(得分:2)

我会尝试以下方法:

class myClass
{
  public: 
    MyClass(int size);
    ~MyClass();
  private:
    int* _intArray;
};

MyClass::MyClass(int size) {
  _intArray = new int[size];
  for (int i=0; i<size; ++i) _intArray[i] =0; // or use memset ...
}

MyClass::~MyClass() {
  delete[] _intArray;
}

或者,更好的是,使用STL vector而不是......

答案 2 :(得分:2)

我的代码正如我写的那样:

class myClass
{
  public: MyClass(int size);
  private:
    int _intArray[];
};

_intArray的声明无效C ++:原始数组需要在编译时指定大小。

您可以改为使用std::vector

class myClass
{
public:
    MyClass( int size )
        : intArray_( size )    // Vector of given size with zero-valued elements.
    {}

private:
    std::vector<int> intArray_;
};

注1 :一些编译器可能允许您的原始代码作为语言扩展,以支持“struct hack”(这是C语言中不需要的C技术)。

注2 :我已更改了您的会员名称。通常,名称开头的下划线可能会有问题,因为它们可能与C ++实现中的名称冲突。

干杯&amp;第h。,

答案 3 :(得分:2)

你应该像其他人建议的那样使用矢量。解决方法可以如图所示(如果您不想使用memcpy或循环)。

如果你有一个非常庞大的数组,这将是有用的。请注意,它会添加一个间接级别来访问数组。

class myClass 
{ 
public: 
   myClass(){
      mt = T();    // value initialize.
   }
private:
   struct T{
      int _intArray[10]; 
   } mt;
};

int main(){
   myClass m;
}