I got an error: expected constructor, destructor, or type conversion before '&' token when overloading operator=
<p>I wrote things like that:</p>

<pre><code>template &lt;class T&gt;
MyStack&lt;T&gt;::MyStack()
{
    STACK_SIZE=20;
    STACK_CURRENT=0;
    data=new T[STACK_SIZE];
}

template &lt;class T&gt;
MyStack&lt;T&gt;::MyStack(int thesize)
{
    STACK_SIZE=thesize;
    STACK_CURRENT=0;
    data=new T[STACK_SIZE];
}

template &lt;class T&gt;
MyStack&lt;T&gt;::MyStack(const MyStack&amp; obj)
{
    STACK_SIZE=obj.STACK_SIZE;
    STACK_CURRENT=obj.STACK_CURRENT;
    data=new T[STACK_SIZE];
    for(int i=0; i&lt;STACK_CURRENT; i++)
    {
        data[i]=obj.data[i];
    }
}

template &lt;class T&gt;
MyStack&lt;T&gt;::~MyStack()
{
//do nothing
}
//--------------------Get Error below this line-------------------------
template &lt;class T&gt; MyStack&amp; MyStack&lt;T&gt;::operator=(const MyStack&amp; obj)
//--------------------Get Error in this line---------------------------
{
STACK_SIZE=obj.STACK_SIZE;
STACK_CURRENT=obj.STACK_CURRENT;
data=new T*[STACK_SIZE];
for(int i=0; i&lt;STACK_CURRENT; i++)
{
    data[i]=obj.data[i];
}
return *this;
}

template &lt;class T&gt;bool MyStack&lt;T&gt;::empty()
{
if(STACK_CURRENT==0) return true;
return false;
}

template &lt;class T&gt; T&amp; MyStack&lt;T&gt;::top()
{
return data[STACK_CURRENT-1];
}

template &lt;class T&gt; void MyStack&lt;T&gt;::push(T&amp; obj)
{
if(STACK_CURRENT&gt;=STACK_SIZE-3)
{
    T* tempdata=new T[STACK_SIZE*2];
    for(int i=0; i&lt;STACK_CURRENT; i++)
    {
        tempdata[i]=data[i];
    }
    delete[] data;
    data=new T[STACK_SIZE*2];
    for(int i=0; i&lt;STACK_CURRENT; i++)
    {
        data[i]=tempdata[i];
    }
    STACK_SIZE+=STACK_SIZE;
}
data[STACK_CURRENT]=obj;
STACK_CURRENT++;
}

template &lt;class T&gt; void MyStack&lt;T&gt;::pop()
{
STACK_CURRENT--;
}

template &lt;class T&gt; int MyStack&lt;T&gt;::size()
{
return STACK_CURRENT;
}
</code></pre>

<p>My Header has declaration</p>

<pre><code>template&lt;class T&gt; class MyStack
{
public:
MyStack();
MyStack(int);
MyStack(const MyStack&amp;);
~MyStack();
MyStack&amp; operator=(const MyStack&amp;);
bool empty();
T&amp; top();
void push(T&amp;);
void pop();
int size();
private:
int STACK_SIZE;
int STACK_CURRENT;
T* data;
};
</code></pre>

<p>But I can't pass compiling, why? Thanks!</p>
