You've shown everything except the actual line that produces the error.
But what I see is this. You have a class that has the member:
RLE<char> m_Data;
After template expansion, that struct will have the member:
char *m_Data;
You say there is no operator=
when you assign memblock
to m_Data
. So I can only conclude that you are doing this:
m_Data = memblock;
Where you should actually be doing this:
m_Data.m_Data = memblock;
m_Data.m_Size = size;
Instead of directly operating on a struct's internals, you might be better off making a function:
template <typename T>
void RLE<T>::Alloc( size_t size )
{
if( m_Data != nullptr ) delete [] m_Data;
m_Data = new T [size];
m_Size = size;
}