2014-10-05 154 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