C / Arduino:动态int数组

新手上路,请多包涵

我正在为 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 不是一个选项

原文由 JNK 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.3k
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++ 实现中的名称冲突。

干杯&hth.,

原文由 Cheers and hth. - Alf 发布,翻译遵循 CC BY-SA 2.5 许可协议

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

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

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

int main(){
   myClass m;
}

原文由 Chubsdad 发布,翻译遵循 CC BY-SA 2.5 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏