Я пытаюсь разработать библиотеку Arduino, которая состоит из двух классов.Я хочу, чтобы 'WayPointStack' хранил массив 'WPCommand', но я не могу заставить его работать.
Это, очевидно, проблема с указателем, но я не знаю, как ее решить.В моем коде осталось четыре ошибки:
WayPointStack.cpp:23:7: error: incompatible types in assignment of 'WPCommand*' to 'WPCommand [0]'
_wp = new WPCommand[arrSize]; //Fixed
WayPointStack.cpp:44:34: error: could not convert '(operator new(16u), (((WPCommand*)<anonymous>)->WPCommand::WPCommand(4, 10000), ((WPCommand*)<anonymous>)))' from 'WPCommand*' to 'WPCommand'
return new WPCommand(_END, 10000);
WayPointStack.cpp:59:15: error: no match for 'operator=' (operand types are 'WPCommand' and 'WPCommand*')
_wp[pointer] = new WPCommand(target, time); # Fixed
WPCommand.h:10:7: note: candidate: WPCommand& WPCommand::operator=(const WPCommand&)
class WPCommand # Does not appear anymore, fixed
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.h
#ifndef WayPointStack_h
#define WayPointStack_h
#include "Arduino.h"
#include "WPCommand.h"
class WayPointStack
{
public:
WayPointStack();
WayPointStack(WPCommand wp[], int length);
WPCommand GetNextWP();
WPCommand GetWP(int i);
void AddWP(int target, int time);
int SetWPPointer(int i);
int GetWPPointer();
int GetLength();
private:
WPCommand _wp[];
int pointer;
int _length;
};
#endif
WayPointStack.cpp (частично)
#include "Arduino.h"
#include "WayPointStack.h"
#include "WPCommand.h"
#define _BACKWARD 0
#define _FORWARD 1
#define _STOP 2
#define _LEFT 3
#define _RIGHT 4
#define _END 4
#define arrSize 100
WayPointStack::WayPointStack()
{
_wp = new WPCommand[arrSize];
_length = 0;
pointer = 0;
}
WayPointStack::WayPointStack(WPCommand wp[], int length)
{
_wp = new WPCommand[arrSize];
for (int i = 0; i < length; i++){
_wp[i] = wp[i];
}
_length = length;
pointer = 0;
}
WPCommand WayPointStack::GetNextWP()
{
if (pointer < _length){
pointer++;
return _wp[pointer-1];
}
return new WPCommand(_END, 10000);
}
Я пытался более или менее произвольно ссылаться и разыменовывать _wp и wp [], но это не сработало.
Редактировать: Изменение
WPCommand _wp[];
до
WPCommand *_wp;
успешно исправили первую ошибку.Делаем то же самое с
WayPointStack(WPCommand *wp, int length);
Редактировать:
_wp[pointer] = WPCommand(target, time);
вместо
_wp[pointer] = new WPCommand(target, time);
успешно исправлена ошибка номер 3.
Редактировать:
return WPCommand(_END, 10000);
исправлена ошибка № 2.
Проблема решена.