2016-04-06 30 views
-2

我試圖創建一個將數組中的Movie對象存儲的泛型類。 我想覆蓋+=-=運算符以添加或刪除數組中的元素。錯誤C2677:binary'+ =':找不到需要輸入'Movie'的全局運算符(或者沒有可接受的轉換)

template<typename Element> 
movieArray<Element>& movieArray<Element>::operator-=(int position) 
{ 
    // some code here... 
    return *this; 
} 

template<typename Element> 
void movieArray<Element>::deleteElem(int position) 
{ 
    this->elements -= position; 
} 

刪除部分按預期工作。然而,當我做添加操作同樣的事情:

template<typename Element> 
movieArray<Element>& movieArray<Element>::operator+=(const Element &elem) 
{ 
    elements[lenght++] = elem; 
    return *this; 
} 

template<typename Element> 
void movieArray<Element>::addElem(const Element &elem) 
{ 
    resizeArray(); 
    this->elements += elem; 
} 

我收到以下錯誤:

error C2677: binary '+=' : no global operator found which takes type 'Movie' (or there is no acceptable conversion)

我不知道爲什麼會這樣。

如果我改變Elementint,就像我在-=方法,代碼編譯。

+0

你需要改變你的標題,以更好地反映實際問題,而不是一個非常具體的錯誤。否則你不會得到太多的迴應。例如:指定二進制+ =全局運算符時出錯。 – CaptainBli

+0

你能展示你實例化你的模板的代碼片段嗎? – Christophe

+0

元素聲明爲什麼?錯誤是告訴你用於'elements'的類型沒有'operator + ='實現,它接受一個'Movie'作爲輸入。如果你想用'addElem()'來調用你的'operator + =',那麼使用'* this + = elem;'而不是'this-> elements + = elem;'與'deleteElem()'類似,來調用''operator - =',使用'* this - = position;'而不是'this-> elements - = position;'。 –

回答

0

試試這個:

template<typename Element> 
movieArray<Element>& movieArray<Element>::operator-=(int position) 
{ 
    // some code here... 
    return *this; 
} 

template<typename Element> 
void movieArray<Element>::deleteElem(int position) 
{ 
    *this -= position; 
} 

template<typename Element> 
movieArray<Element>& movieArray<Element>::operator+=(const Element &elem) 
{ 
    resizeArray(); 
    elements[lenght++] = elem; 
    return *this; 
} 

template<typename Element> 
void movieArray<Element>::addElem(const Element &elem) 
{ 
    *this += elem; 
} 

或者這樣:

template<typename Element> 
movieArray<Element>& movieArray<Element>::operator-=(int position) 
{ 
    deleteElem(position); 
} 

template<typename Element> 
void movieArray<Element>::deleteElem(int position) 
{ 
    // some code here... 
} 

template<typename Element> 
movieArray<Element>& movieArray<Element>::operator+=(const Element &elem) 
{ 
    addElem(elem); 
    return *this; 
} 

template<typename Element> 
void movieArray<Element>::addElem(const Element &elem) 
{ 
    resizeArray(); 
    elements[lenght++] = elem; 
} 
+0

是的,這個技巧:我用* this + = elem改變了this-> elements + = elem。現在它工作正常。謝謝!。 –

0

大家都在猜測了很多,因爲你只發布代碼的一個小部分。但也許你的意思是:

*this += elem; 

這將調用你的類的重載operator+=功能,你表現,而不是:

this->elements += elem; 

這將調用+=的成員變量elements。你還沒有告訴我們elements是什麼,但是(根據你的症狀),或許它有一些類型,其中+=定義爲int,但不是Element


NB。與編譯錯誤無關,但resizeArray();應位於operator+=之內,否則(假設此功能對於在陣列中創建空間是必需的),當有人撥打operator+=而不是addElem時,您將溢出您的空間。

+0

是的,這個技巧:我用* this + = elem改變了this-> elemements + = elem。現在它工作正常。 –

相關問題