(*this)を返すメンバ関数を持つクラス

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
zxc
記事: 79
登録日時: 11年前
住所: 日本の背骨(?)あたり

(*this)を返すメンバ関数を持つクラス

#1

投稿記事 by zxc » 11年前

  
  環境;WinXP,VCE++2010
  次のようなクラスを作りました。

コード:

//////Graph.h(他の関数等略)//////////////
class Graph{
 	private:
		Size<int> size;
	public:
		Graph& operator()()const;
};

コード:

/////Graph.cpp(他の関数等略)///////
Graph& Graph::operator()()const{
	return (*this);
}
  このGraphクラスのoperator()は「 error C2440: 'return' : 'const Graph' から 'Graph &' に変換できません。」ということでコンパイルが通りません。

しかし

コード:

////////size.h(他の関数等略)///////
template<typename T>
class Size{
	public:
		Size& operator()()const;
};

コード:

///////size.cpp(他の関数等略)////////////////
template<typename T>
Size<T>& Size<T>::operator()()const{
	return (*this);
}
  こちらのsizeクラスのoperator()についてはエラーが出ないようです。

  エラーC2440はどうやらキャストに関するエラーのようですが、返り値の型の扱いはsizeクラスもGraphクラスもoperator()については、自分には同じに見えます。いったいどこが不適切なのでしょうか。

アバター
h2so5
副管理人
記事: 2212
登録日時: 13年前
住所: 東京
連絡を取る:

Re: (*this)を返すメンバ関数を持つクラス

#2

投稿記事 by h2so5 » 11年前

テンプレートクラスの場合もエラーは出ますよ。
http://ideone.com/fpA98a

テンプレートの定義だけして実体化していないからエラーが出ないだけでは?

かずま

Re: (*this)を返すメンバ関数を持つクラス

#3

投稿記事 by かずま » 11年前

const の付け方が間違っています。
こうすればよいでしょう。

コード:

class Graph {
private:
    int size;
public:
    Graph& operator()();
    const Graph& operator()() const;
};

Graph& Graph::operator()() { return *this; }
const Graph& Graph::operator()() const { return *this; }

zxc
記事: 79
登録日時: 11年前
住所: 日本の背骨(?)あたり

Re: (*this)を返すメンバ関数を持つクラス

#4

投稿記事 by zxc » 11年前

  解決しました。
テンプレ-トクラスの定義をcppファイルで行おうとしていたので、すべてヘッダで行うように書き換えたことと、指摘された箇所にconst修飾子を加えたことでコンパイルエラーがなくなりました。

h2so5 さん、かずまさん、分かりやすい御指摘ありがとうございました。

閉鎖

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