Разбор массива объекта в конструкторе библиотеки

Я пытаюсь разработать библиотеку Arduino, состоящую из двух классов. Я хочу, чтобы WayPointStack хранил массив WPCommand, но не могу заставить его работать.

WayPointStack.h

#ifndef WayPointStack_h
#define WayPointStack_h

#include "Arduino.h"
#include "WPCommand.h"

class WayPointStack
{
  public:
    WayPointStack();
    WayPointStack(WPCommand* wp);
    WPCommand GetNextWP();
    WPCommand GetWP(int i);
    void AddWP(int target, int time);
    int SetWPPointer(int i);
    int GetLength();
  private:
    WPCommand* _wp;
    int pointer;
    int length;
};
#endif

WPCommand.h

#ifndef WPCommand_h
#define WPCommand_h

#include "Arduino.h"

class WPCommand
{
  public:
    WPCommand(int target, int time );
    WPCommand();
    int GetTarget();
    int GetTime();
    int LEFT;
    int RIGHT;
    int FORWARD;
    int BACKWARD;
    int STOP;
    int END;
  private:
    int _target;
    int _time;
};

#endif

Части WaypointStack.cpp

#include "Arduino.h"
#include "WayPointStack.h"
#include "WPCommand.h"

#define arrSize 100

WayPointStack::WayPointStack()
{
  _wp = new WPCommand[arrSize]; // должно хватить
  length = 0;
  pointer = 0;
}

WayPointStack::WayPointStack(WPCommand[] wp)
{
    _wp = new WPCommand[arrSize]; // должно хватить
    for (int i = 0; i < sizeof(wp), i++){
        _wp[i] = wp[i];
    }
    length = sizeof(wp);
    pointer = 0;
}

Я почти уверен, что делаю что-то не так с указателями, но не знаю, как это исправить. Первые две ошибки

WayPointStack.cpp:24:42: error: expected ',' or '...' before 'wp'
WayPointStack::WayPointStack(WPCommand[] wp)

и

WayPointStack.cpp:27:29: error: 'wp' was not declared in this scope
for (int i = 0; i < sizeof(wp), i++){

Очевидно, мне придется использовать указатель. Это все, что я знаю на данный момент. Есть у кого-нибудь идеи?

, 👍0

Обсуждение

Arduino — это не Java, он основан на C++. Проверьте синтаксис массивов/векторов и передачу параметров по ссылке. Также проверьте, кто определяет количество элементов в векторе. Sizeof() — количество байтов., @Mikael Patel


1 ответ


Лучший ответ:

1

Это вопрос по C++, а не Arduino, и его следует задавать при переполнении стека.

В C/C++ [] должен быть указан в имени переменной, а не в ее типе. WPCommand wp[] (то же самое, что WPCommand* wp).

sizeof возвращает размер в байтах, а не количество элементов. отправить длину в качестве параметра

Динамическое распределение памяти в MCU — это нехорошо. Вы можете иметь в WayPointStack

WPCommand _wp[arrSize]
,

Спасибо. Это значительно уменьшило количество ошибок., @Kruspe