constと参照について

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
dom

constと参照について

#1

投稿記事 by dom » 9年前

オプジェクトをコピーしたくなかったので,以下のように参照渡し,参照戻しで演算子のオーバーロードをしようとしたのですが
「'const MyClass' から 'MyClass &' へ 'this' ポインタを変換できません。」とコンパイルエラーが出ます.

コード:

MyClass& func(const MyClass& obj)
{
    (省略)  
    obj.func();    ←エラー
    (省略)  
    return obj;
}
objを変更しているわけではないと思うのでなぜエラーになるのかよくわかりません.
このエラーはどういう意味なのでしょうか?

dom

Re: constと参照について

#2

投稿記事 by dom » 9年前

コード:

MyClass& operator =(const MyClass& obj)
{
    (省略)  
    obj.func();    ←エラー
    (省略)  
    return obj;
}
でした.

YuO
記事: 941
登録日時: 9年前
住所: 東京都世田谷区

Re: constと参照について

#3

投稿記事 by YuO » 9年前

const Tの参照なので,オブジェクト自体が変化しない,ということになります。
# const T &はconst T * constに近いイメージ。

const T型のオブジェクトのメンバ関数を呼び出すので,そのメンバ関数はconstメンバ関数である必要があります。

コード:

class MyClass
{
public:
    void func () const { /* ... */ }
};
のように。

さらに,戻り値の型もconst修飾が外れているので,
  • 引数の型をMyClass &にする
  • 戻り値をobj以外にする。operator =であれば,*thisを返すのが普通。
とする必要があります。

閉鎖

“C言語何でも質問掲示板” へ戻る