D
divya_rathore_
I have a problem regarding template classes. I am trying to write a
template class which allocates dynamic memory for 2D/3D arrays.
Consider a template class to allocate a 2D array:
//DynAlloc.h
template <class T>
class CADynamicAllocator
{
public:
CADynamicAllocator();
virtual ~CADynamicAllocator();
public:
T** Allocate2DArray(T** array, int width, int height);
DeAllocate2DArray(T** array, int width, int height);
};
template <class T>
T** CADynamicAllocator<T>::Allocate2DArray(T** array, int width, int
height)
{
// No. of rows = 'height'
// No. of cols = 'width'
int y;
//Firstly, allocate height.
array = new T*[height];
//And then the width..
for (y=0; y<height; y++) array[y] = new T[width];
return array;
}
And now consider the usage in main.cpp
//main.cpp
#include "DynAlloc.h"
int main()
{
float*** array3D = NULL;
int x,y,z;
x=y=z=10;
CADynamicAllocator<float> dynAlloc;
m_Stack = dynAlloc.Allocate3DArray(m_Stack,x,y,z);
}
Now the Error message that the compiler (vc++ 6.0) is giving:
unresolved external symbol "public: virtual __thiscall
CADynamicAllocator<float>::~CADynamicAllocator<float>(void)"
(??1?$CADynamicAllocator@M@@UAE@XZ)
error LNK2001: unresolved external symbol "public: float * * *
__thiscall CADynamicAllocator<float>::Allocate3DArray(float * *
*,int,int,int)"
(?Allocate3DArray@?$CADynamicAllocator@M@@QAEPAPAPAMPAPAPAMHHH@Z)
error LNK2001: unresolved external symbol "public: __thiscall
CADynamicAllocator<float>::CADynamicAllocator<float>(void)"
(??0?$CADynamicAllocator@M@@QAE@XZ)
What are the syntax (among any other) issues that I am missing here?
Any adivce would be really appreciated.
regards,
D. Rathore
template class which allocates dynamic memory for 2D/3D arrays.
Consider a template class to allocate a 2D array:
//DynAlloc.h
template <class T>
class CADynamicAllocator
{
public:
CADynamicAllocator();
virtual ~CADynamicAllocator();
public:
T** Allocate2DArray(T** array, int width, int height);
DeAllocate2DArray(T** array, int width, int height);
};
template <class T>
T** CADynamicAllocator<T>::Allocate2DArray(T** array, int width, int
height)
{
// No. of rows = 'height'
// No. of cols = 'width'
int y;
//Firstly, allocate height.
array = new T*[height];
//And then the width..
for (y=0; y<height; y++) array[y] = new T[width];
return array;
}
And now consider the usage in main.cpp
//main.cpp
#include "DynAlloc.h"
int main()
{
float*** array3D = NULL;
int x,y,z;
x=y=z=10;
CADynamicAllocator<float> dynAlloc;
m_Stack = dynAlloc.Allocate3DArray(m_Stack,x,y,z);
}
Now the Error message that the compiler (vc++ 6.0) is giving:
unresolved external symbol "public: virtual __thiscall
CADynamicAllocator<float>::~CADynamicAllocator<float>(void)"
(??1?$CADynamicAllocator@M@@UAE@XZ)
error LNK2001: unresolved external symbol "public: float * * *
__thiscall CADynamicAllocator<float>::Allocate3DArray(float * *
*,int,int,int)"
(?Allocate3DArray@?$CADynamicAllocator@M@@QAEPAPAPAMPAPAPAMHHH@Z)
error LNK2001: unresolved external symbol "public: __thiscall
CADynamicAllocator<float>::CADynamicAllocator<float>(void)"
(??0?$CADynamicAllocator@M@@QAE@XZ)
What are the syntax (among any other) issues that I am missing here?
Any adivce would be really appreciated.
regards,
D. Rathore