2017-05-20 1 views
0

オーバーロードされた演算子=クラスのTextureImageに対してコンパイラが実行可能な演算子 "="を保持し続けることはありません。演算子のオーバーロードが実行可能ではありません

TextureImage& operator=(TextureImage i){ 
     this->x = i.getX(); 
     this->y = i.getY(); 
     this->n = i.getN(); 
     this->data = i.getData(); 
     return *this; 
    } 

私は関数にconstを追加した場合、コンパイラは、私はconstメンバ関数内で非静的データメンバに割り当てることができないと言います。

だからここ演算子=

+0

'=(TextureImage const&i)'というオブジェクトへのconst参照を受け付けるべきです。 – VTT

+0

@VTTこれは大したことではありませんが、正式な形式です。 –

+0

完全なメッセージをコピーして貼り付けてください! –

答えて

2

を過負荷にする方法あなたは確かにconstメンバ関数として、オーバーロード代入演算子を持っている必要はありません。あなたが主張するならば、すべてのメンバ変数をmutableにする。

正規形が

TextureImage& operator=(const TextureImage& i) { 
    x = i.x; 
    y = i.y; 
    n = i.n; 
    data = i.data; 
    return *this; 
} 

のように見えますが、あなたがそこにゲッターを使用する必要はありません。そこに行うにはより多くの何もない場合は、私はdataニーズがあると考えられるものの、コンパイラがすでに自動的にまたはオンデマンド

TextureImage& operator=(const TextureImage& i) = default; 

にそのコードを生成するので

、あなたは、あなた自身の代入演算子を実装する必要はありませんいくつかの特別な処理は、配列やポインタのメンバ変数のようなものであると思われます。

この場合、データメンバーとしてstd::arrayまたはstd::vectorを使用し、デフォルトの実装を採用することをお勧めします。

+0

私はそれを口笛で作ったが、過負荷=実用的ではないと言っている。 – JOYD

+0

この「標準形式」にあった場合は、最初に書く必要はない。 –

+0

@JOYDいいえ、「相互」という言葉は、もっと洗練された冗談でした。私の答えに示したように実装を提供してください。 –

関連する問題