Weiß wer was die bedeuten?
Code:
Main.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol ""public: __thiscall CFrameSmoother<float>::CFrameSmoother<float>(int,float const &)" (??0?$CFrameSmoother@M@@QAE@HABM@Z)" in Funktion ""void __cdecl `dynamic initializer for 'Smoother''(void)" (??__ESmoother@@YAXXZ)".
Main.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol ""public: __thiscall CFrameSmoother<float>::~CFrameSmoother<float>(void)" (??1?$CFrameSmoother@M@@QAE@XZ)" in Funktion ""void __cdecl `dynamic atexit destructor for 'Smoother''(void)" (??__FSmoother@@YAXXZ)".
Funktion.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol ""public: float __thiscall CFrameSmoother<float>::getSmoothedValue(void)const " (?getSmoothedValue@?$CFrameSmoother@M@@QBEMXZ)" in Funktion ""public: void __thiscall cFunktion::tickAll(void)" (?tickAll@cFunktion@@QAEXXZ)".
Funktion.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol ""public: void __thiscall CFrameSmoother<float>::addValue(float const &)" (?addValue@?$CFrameSmoother@M@@QAEXABM@Z)" in Funktion ""public: void __thiscall cFunktion::tickAll(void)" (?tickAll@cFunktion@@QAEXXZ)".
Edit Quellcode:
Code:
template<typename T> class CFrameSmoother
{
public:
CFrameSmoother(int c_filterSize, const T& c_stdValue);
~CFrameSmoother();
void addValue(const T& value); //fügt ein neuen Wert hinzu
T getSmoothedValue() const; //liefert den geglättetem Wert
void reset(); // Zurücksetzen
protected:
T* p_buffer; //der Puffer
int filterSize; //Größe des Puffers/Filters
int curser; //Cursor
T stdValue; //Standart Wert
};
Code:
template<class T>
CFrameSmoother<T>::CFrameSmoother(int c_filterSize, const T& c_stdValue) : cursor(0),
filterSize(c_filterSize),
stdValue(c_stdValue)
{
p_buffer = new T[filterSize];
}
template<class T>
CFrameSmoother<T>::~CFrameSmoother()
{
delete[] p_buffer;
}
template<class T>
void CFrameSmoother<T>::addValue(const T& value) //fügt ein neuen Wert hinzu
{
p_buffer[curser++ % filterSize] = value;
}
template<class T>
T CFrameSmoother<T>::getSmoothedValue() const //liefert den geglättetem Wert
{
int n = curser < filterSize ? cursor : filterSize;
if(!n) return stdValue;
else
{
T avg;
ZeroMemory(&avg, sizeof(avg));
for(int i = 0; i < n; i++) avg += p_buffer[i];
avg /= static_cast<T>(i);
return avg;
}
}
template<class T>
void CFrameSmoother<T>::reset() // Zurücksetzen
{
cursor = 0;
}