ページ 1 / 1
constと参照について
Posted: 2011年3月30日(水) 15:09
by dom
オプジェクトをコピーしたくなかったので,以下のように参照渡し,参照戻しで演算子のオーバーロードをしようとしたのですが
「'const MyClass' から 'MyClass &' へ 'this' ポインタを変換できません。」とコンパイルエラーが出ます.
コード:
MyClass& func(const MyClass& obj)
{
(省略)
obj.func(); ←エラー
(省略)
return obj;
}
objを変更しているわけではないと思うのでなぜエラーになるのかよくわかりません.
このエラーはどういう意味なのでしょうか?
Re: constと参照について
Posted: 2011年3月30日(水) 15:13
by dom
コード:
MyClass& operator =(const MyClass& obj)
{
(省略)
obj.func(); ←エラー
(省略)
return obj;
}
でした.
Re: constと参照について
Posted: 2011年3月30日(水) 15:16
by YuO
const Tの参照なので,オブジェクト自体が変化しない,ということになります。
# const T &はconst T * constに近いイメージ。
const T型のオブジェクトのメンバ関数を呼び出すので,そのメンバ関数はconstメンバ関数である必要があります。
コード:
class MyClass
{
public:
void func () const { /* ... */ }
};
のように。
さらに,戻り値の型もconst修飾が外れているので,
- 引数の型をMyClass &にする
- 戻り値をobj以外にする。operator =であれば,*thisを返すのが普通。
とする必要があります。