0

I am trying to develop an Arduino library that consists out of two classes. I want 'WayPointStack' to store an array of 'WPCommand', but I can't get it to work.

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

Parts of WaypointStack.cpp

#include "Arduino.h"
#include "WayPointStack.h"
#include "WPCommand.h"
#define arrSize 100
WayPointStack::WayPointStack()
{
 _wp = new WPCommand[arrSize]; // should be enough, heap blabla
 length = 0;
 pointer = 0;
}
WayPointStack::WayPointStack(WPCommand[] wp)
{
 _wp = new WPCommand[arrSize]; // should be enough, heap blabla
 for (int i = 0; i < sizeof(wp), i++){
 _wp[i] = wp[i];
 }
 length = sizeof(wp);
 pointer = 0;
}

I'm pretty sure I'm doing something wrong with the pointers, but I don't know how to fix it. The first two errors are

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

and

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

I obviously have to use a pointer. This is all I know, so far. Has someone an idea?

asked Mar 27, 2019 at 3:00
1
  • 1
    Arduino is not Java it is based on C++. Check the syntax for array/vectors and passing parameters by reference. Also check who to determine the number of elements in a vector. Sizeof() is the number of bytes. Commented Mar 27, 2019 at 7:10

1 Answer 1

1

This is a C++, not Arduino question and should be asked on Stack Overflow.

In C/C++ the [] must be on variable name, not on type. WPCommand wp[] (it is the same as WPCommand* wp).

sizeof return size in bytes, not element count. send length as parameter

Dynamic memory allocation in MCU is not a good thing. You can have in WayPointStack

WPCommand _wp[arrSize] 
answered Mar 27, 2019 at 5:02
1
  • Thank you. It reduced the error amount dramatically. Commented Mar 27, 2019 at 9:57

Your Answer

Draft saved
Draft discarded

Sign up or log in

Sign up using Google
Sign up using Email and Password

Post as a guest

Required, but never shown

Post as a guest

Required, but never shown

By clicking "Post Your Answer", you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.