Разбор массива объекта в конструкторе библиотеки
Я пытаюсь разработать библиотеку 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++){
Очевидно, мне придется использовать указатель. Это все, что я знаю на данный момент. Есть у кого-нибудь идеи?
@Kruspe, 👍0
Обсуждение1 ответ
Лучший ответ:
Это вопрос по C++, а не Arduino, и его следует задавать при переполнении стека.
В C/C++ [] должен быть указан в имени переменной, а не в ее типе. WPCommand wp[]
(то же самое, что WPCommand* wp
).
sizeof
возвращает размер в байтах, а не количество элементов. отправить длину
в качестве параметра
Динамическое распределение памяти в MCU — это нехорошо. Вы можете иметь в WayPointStack
WPCommand _wp[arrSize]
Спасибо. Это значительно уменьшило количество ошибок., @Kruspe
- Работает с gcc, но не с Arduino. ошибка: taking address of temporary array
- Как масштабировать растровое изображение (массив uint8_t) в Arduino?
- Получить массив символов с помощью модуля SIM900
- Матричный дисплей с Arduino UNO (ПРОБЛЕМА)
- Почему я не могу получить размер массива указателей
- Замена большой таблицы поиска оператором switch
- Матрица и пространство состояний Реализация Arduino
- CC3000 Wi-Fi: включить отладку
Arduino — это не Java, он основан на C++. Проверьте синтаксис массивов/векторов и передачу параметров по ссылке. Также проверьте, кто определяет количество элементов в векторе. Sizeof() — количество байтов., @Mikael Patel