Я уже прочитал здесь 15 неопределенных справочных тем и использовал Google, чтобы найти правильный ответ, но не тот, который действительно помог.
Я написал 1D и 2D простой класс хранения, который позволяет быстро проходить через прямой доступ к данным (плюс некоторые удобные средства доступа). Здесь идет 1D (2D почти такой же, просто 2D)
Заголовок:
#ifndef MULTI1_H
#define MULTI1_H
#include <stdio.h>
#include <stdlib.h>
#include <inttypes.h>
template <class T>
class Multi1
{
public:
Multi1(int32_t size_ = -1);
~Multi1();
void set(T val, int32_t pos);
T& operator[] (int32_t pos) const;
T& at(int32_t pos) const;
int32_t m_size;
T *m_data;
};
#endif // MULTI1_H
Body:
#include "multi1.h"
template <class T>
Multi1<T>::Multi1(int32_t size_) :
m_size(size_),
m_data(NULL)
{
if (size_>0)
m_data = (T *) malloc (sizeof(T)*size_);
else
m_size = 0;
}
template <class T>
Multi1<T>::~Multi1()
{
if (m_data!=NULL)
free (m_data);
}
template <class T>
void Multi1<T>::set(T val, int32_t pos)
{
m_data[pos] = val;
}
template <class T>
T& Multi1<T>::operator[](int32_t pos) const
{
return m_data[pos];
}
template <class T>
T& Multi1<T>::at(int32_t pos) const
{
return m_data[pos];
}
./build/main.o: In function `setupDemo(Multi1<voCam*>&, Multi1<voBoard*>&, Multi2<voBoardObservation*>&)':
./src/main.cpp:32: undefined reference to `Multi1<voCam*>::operator[](int) const'
./src/main.cpp:31: undefined reference to `Multi1<voCam*>::operator[](int) const'
./src/main.cpp:30: undefined reference to `Multi1<voBoard*>::operator[](int) const'
./src/main.cpp:29: undefined reference to `Multi1<voBoard*>::operator[](int) const'
./src/main.cpp:41: undefined reference to `Multi1<voCam*>::operator[](int) const'
....
Я проверил включение как 5 раз, и недавно я довольно привык к программированию на C, где я могу держать вещи вроде линкера вендетты у себя на шее.
Примечание: я компилирую с g ++, флаги компоновщика: -lstdc++ -lm