2016-04-06 19 views
-2

Movieオブジェクトを配列に格納する汎用クラスを作成しようとしています。 配列に要素を追加または削除するには、+=-=演算子をオーバーライドします。エラーC2677:バイナリ '+ =':タイプ 'ムービー'(または許容される変換はありません)を持つグローバル演算子が見つかりません

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; 
} 

削除部分は期待どおりに機能します。私はAdd操作のために同じことを行うときしかし、:

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)

なぜこれが起こっている、私はわかりません。

からintに変更すると、-=メソッドのように、コードがコンパイルされます。

+0

実際の質問をよりよく反映するようにタイトルを変更する必要があります。具体的なエラーはありません。さもなければあなたは多くの応答を得ることはありません。何かが好きです:バイナリ+ =グローバルオペレータを指定するとエラーが発生します。 – CaptainBli

+0

テンプレートをインスタンス化するコードスニペットを表示できますか? – Christophe

+0

'elements'は何と宣言されていますか?このエラーは、 'elements'に使用される型が' Movie'を入力として受け入れる 'operator + ='実装を持たないことを伝えています。 'addElem()'が 'operator + ='を呼び出すようにしたければ、 'this-> elements + = elem;'の代わりに '* this + = elem;'を使います 'deleteElem()'と同様に、 - = '、this - > elements - = position;'の代わりに '* this - = 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 + = elemで変更しました。今それは正しく動作します。ありがとうございました!。 –

0

は、我々は多くのことを推測しています。しかし、おそらくあなたは意味:代わりに、あなたが示したクラスのオーバーロードさoperator+=関数を呼び出します

*this += elem; 

this->elements += elem; 

がどのメンバ変数elements+=を呼ぶだろう。あなたはelementsが何であるか教えてくれませんでしたが、あなたの症状に基づいて、おそらく+=intで定義されていますが、Elementでは定義されていないタイプがあります。


NB。あなたのコンパイルエラーとは関係ありませんが、resizeArray();operator+=の中になければなりません。そうしないと、この関数がaddElemの代わりにoperator+=を呼び出したときにスペースをあふれさせます。

+0

はい、これはトリックでした:私はthis-> elemements + = elemを* this + = elemに変更しました。今それは正しく動作します。 –

関連する問題