Массив std::array является членом класса. Нужно задавать его размер через конструктор. С этим вроде разобрался:
Com.h:
#include <array>
template <uint8_t data_size>
class Com
{
public:
Com(uint8_t type);
void write();
private:
uint8_t _type;
std::array<uint32_t, data_size> _data;
};
Com.cpp:
#include "com.h"
template <uint8_t data_size>
Com<data_size>::Com(uint8_t type)
{
_type = type;
};
Проблема: как реализовать методы класса в cpp файле?
Как для обычного класса void Com::write(){} не работает:
error: 'Com' is not a class, namespace, or enumeration
Желательно обойтись без std::vector, нужен статический массив.
Если делать так:
template <uint8_t data_size>
void Com<data_size>::write()
{
}
то уже линкер ругается: Undefined symbol Com<(unsigned char)8>::Com(unsigned char) (referred from BUILD/source/main.o).
UPD: линкер ругается как раз таки на реализацию конструктора в cpp файле, а не метода.