I made a library for generic queues and tested it in visual studio in c++ and it worked fine.
Now when it came to using it in arduino (esp32 platformIO but with arduino framework) im getting this error message:
Building in release mode
Compiling .pio\build\ttgo-lora32-v1\src\main.cpp.o
Linking .pio\build\ttgo-lora32-v1\firmware.elf
.pio\build\ttgo-lora32-v1\src\main.cpp.o:(.literal._Z5setupv+0x0): undefined reference to `Queue<int>::Queue(unsigned short)'
.pio\build\ttgo-lora32-v1\src\main.cpp.o:(.literal._Z5setupv+0x4): undefined reference to `Queue<int>::~Queue()'
.pio\build\ttgo-lora32-v1\src\main.cpp.o: In function `setup()':
C:\Users\Chris Steffen\Documents\PlatformIO\Projects\WateringSystem/src/main.cpp:56: undefined reference to `Queue<int>::Queue(unsigned short)'
C:\Users\Chris Steffen\Documents\PlatformIO\Projects\WateringSystem/src/main.cpp:56: undefined reference to `Queue<int>::~Queue()'
the .h is:
#ifndef _QUEUEDATA_H_
#define _QUEUEDATA_H_
#include <Arduino.h>
template <typename T>
class Queue {
public:
Queue(uint16_t size);
~Queue();
T deQueue();
bool enQueue(T in);
bool isEmpty() { return numElements == 0 ? true : false; };
bool isFull() { return numElements == size ? true : false; };
T rear() { return queue[head == 0 ? (size - 1) : (head - 1)]; };
T front() { return queue[tail]; };
private:
T *queue;
uint16_t head = 0;
uint16_t tail = 0;
uint16_t size;
uint16_t numElements = 0;
};
#endif
and .ccp is:
#include "queueData.h"
template <typename T>
Queue<T>::Queue(uint16_t _size) {
size = _size;
queue = new T[size];
}
template <typename T>
Queue<T>::~Queue() {
delete [] queue;
}
template <typename T>
T Queue<T>::deQueue() {
T obj = NULL;
if (numElements == 0) return obj;
obj = queue[tail];
tail++;
numElements--;
if (tail >= size) tail = 0;
return obj;
}
template <typename T>
bool Queue<T>::enQueue(T in) {
if (numElements == size) return false;
queue[head] = in;
head++;
numElements++;
if (head == size) head = 0;
return true;
}
To replicate the error just just to make an instance of the queue with any data type:
Queue <int> data(10);
that is enough to get the error