C++ / Arduino:动态int数组

发布于 2024-10-06 10:33:46 字数 538 浏览 6 评论 0原文

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

I'm writing a class for the Arduino. It's been going well so far, but I'm sort of stuck now...

I have declared an int array in my class

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

When I initialize the class MyClass myClass1(5) I need the array to look like this {0,0,0,0,0}.

My question: what do I need to do so that the array contains 'size' amount of zeros?

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

Edit: Following up on various replies below, Arduino does not include the standard library so unfortunately std::vector is not an option

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

述情 2024-10-13 10:33:46

我写下的代码是:

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

干杯&呵呵,

Your code as I'm writing this:

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

The declaration of _intArray is not valid C++: a raw array needs to have a size specified at compile time.

You can instead instead use a std::vector:

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

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

Note 1: some compilers may allow your original code as a language extension, in order to support the "struct hack" (that's a C technique that's not necessary in C++).

Note 2: I've changed the name of your member. Generally underscores at the start of names can be problematic because they may conflict with names from the C++ implementation.

Cheers & hth.,

糖粟与秋泊 2024-10-13 10:33:46

您应该使用 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;
};

You should use a 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;
};
海的爱人是光 2024-10-13 10:33:46

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

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

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

int main(){
   myClass m;
}

You should really use vectors as others have suggested. A work-around could be as shown (in case you do not want to use memcpy or a loop).

This would be useful if you have a really huge array. Note that it would add a level of indirection to access the array.

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

int main(){
   myClass m;
}
半山落雨半山空 2024-10-13 10:33:46

我将尝试以下操作:

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 代替......

I'll try the following:

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

Or, even better, use a STL vector instead ...

手心的海 2024-10-13 10:33:46

您可以使用另一个基于字符串值的黑客,然后填充有限大小的数组
检查这个:
https://github.com/Riadam/ViewPort-Array- Arduino-Uno 移位器.git

you can use another hack basing on a string value and then populate a limited size array
check this :
https://github.com/Riadam/ViewPort-Array-Shifter-for-Arduino-Uno.git

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文