Разбор массива в конструкторе библиотеки - проблема с указателем (C ++) - PullRequest
0 голосов
/ 27 марта 2019

Я пытаюсь разработать библиотеку 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.

Проблема решена.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...