2014-10-05 119 views
3

我试图创建一个堆栈,但即时通讯接收错误与重载my =操作符。 堆栈是类型模板。继承人代码重载操作员=错误

template <typename T> 
T& ::stack& operator =(const stack& other) 
{ 
    if (this == &other) return *this; 

    copy(other.stack1[0], other.stack1[other.size], stack1[0]); 
    return *this; 
} 

任何帮助将不胜感激。由于

+0

请张贴您遇到的错误。现在,我会说,返回'* this'不正确,因为'this'已经是一个指针了。 – 2014-10-05 06:38:26

+1

什么是T&:: stack&'? – chris 2014-10-05 06:39:35

+2

@JaviV但是操作员不会,也不应该返回一个指针。 – juanchopanza 2014-10-05 06:40:21

回答

2

尝试:

template <typename T> 
stack<T>& stack<T>::operator =(const stack& other) 
{ 
    if (this == &other) return *this; 

    copy(other.stack1[0], other.stack1[other.size], stack1[0]); 
    return *this; 
} 
+0

谢谢。像宝石一样工作。如果可能的话,你介意解释为什么你使用堆栈&stack ,然后返回一个指针?谢谢 – Nicknack 2014-10-05 06:54:28

+0

@Nicknack,不客气。返回值是'* this',它是对象的引用。 'this'将是一个指针。 – 2014-10-05 06:55:47

+0

@Nicknack:'stack'是一个模板,而不是一个类型。你不能声明一个返回* template *的函数。当你编写'stack '时,你指定了一个* type *(这是类型参数为'T'的'stack'模板的专用类型)。混淆可能来自这样的事实,即当在模板类的上下文中完成查找时,存在注入名称“堆栈”,这实际上意味着“堆栈”。查找成员函数的参数调用到这个类中,因为它是在类内部完成的,因此'const stack&'真的意味着'const stack &'有 – 2014-10-05 09:22:42

3

请尝试以下签名

template <typename T> 
stack<T>& stack<T>:: operator =(const stack<T>& other) 
0

除此之外似乎还有的身体内的标准算法副本不正确使用操作不正确的声明运营商提供stack1是一个阵列

我只能假设运营商应该看起来像

template <typename T> 
stack<T> & stack<T>::operator =(const stack<T> &other) 
{ 
    if (this == &other) return *this; 

    this->size = other.size; 
    copy(other.stack1, other.stack1 + other.size, this->stack1); 

    return *this; 
} 
+0

你介意使用copy来解释错误吗? – Nicknack 2014-10-05 07:09:46

+0

@Nicknack你没有显示类定义,所以我只能假设stack1是一个数组。如果它确实是一个数组,那么你正在应对它不正确。在我的文章中,写了如何复制数组。 – 2014-10-05 07:12:11

+0

lol ... *操作员的声明不正确*后面跟着包含“stack :perator' :-)”的修正 – 2014-10-05 09:23:49