By using this site, you agree to our updated Privacy Policy and our Terms of Use. Manage your Cookies Settings.
445,852 Members | 2,219 Online
Bytes IT Community
+ Ask a Question
Need help? Post your question and get tips & solutions from a community of 445,852 IT Pros & Developers. It's quick & easy.

template class to alloc memory

P: n/a
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<flo at>(void)"
(??1?$CADynamicAllocator@M@@UAE@XZ)

error LNK2001: unresolved external symbol "public: float * * *
__thiscall CADynamicAllocator<float>::Allocate3DArray(float * *
*,int,int,int)"
(?Allocate3DArray@?$CADynamicAllocator@M@@QAEPAPAP AMPAPAPAMHHH@Z)

error LNK2001: unresolved external symbol "public: __thiscall
CADynamicAllocator<float>::CADynamicAllocator<floa t>(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

Dec 26 '05 #1
Share this Question
Share on Google+
1 Reply


P: n/a
di************@gmail.com wrote:
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();
You declared this member (the default constructor) but you haven't
defined it. Where is its body?
virtual ~CADynamicAllocator();
You declared this member (the destructor) but you haven't defined it.
Where is its body?
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()
{
[...]
CADynamicAllocator<float> dynAlloc;
You create an object of this type. The compiler needs a way to
construct the object. You declared the default constructor. The
compiler sees its declaration and creates the code to invoke it.
The compiler aldo needs a destructor to clean up after 'main' exits.
Since you declared the destructor, the compiler creates code to
invoke it as well.
[...]
}

Now the Error message that the compiler (vc++ 6.0) is giving:

unresolved external symbol "public: virtual __thiscall
CADynamicAllocator<float>::~CADynamicAllocator<flo at>(void)"
(??1?$CADynamicAllocator@M@@UAE@XZ)

error LNK2001: unresolved external symbol "public: float * * *
__thiscall CADynamicAllocator<float>::Allocate3DArray(float * *
*,int,int,int)"
(?Allocate3DArray@?$CADynamicAllocator@M@@QAEPAPAP AMPAPAPAMHHH@Z)

error LNK2001: unresolved external symbol "public: __thiscall
CADynamicAllocator<float>::CADynamicAllocator<floa t>(void)"
(??0?$CADynamicAllocator@M@@QAE@XZ)

What are the syntax (among any other) issues that I am missing here?


You're missing the fact that both the default constructor and the
destructor need to be implemented.

V
Dec 26 '05 #2

This discussion thread is closed

Replies have been disabled for this discussion.