ページ 1 / 1
(*this)を返すメンバ関数を持つクラス
Posted: 2013年5月24日(金) 05:47
by zxc
環境;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()については、自分には同じに見えます。いったいどこが不適切なのでしょうか。
Re: (*this)を返すメンバ関数を持つクラス
Posted: 2013年5月24日(金) 08:15
by h2so5
テンプレートクラスの場合もエラーは出ますよ。
http://ideone.com/fpA98a
テンプレートの定義だけして実体化していないからエラーが出ないだけでは?
Re: (*this)を返すメンバ関数を持つクラス
Posted: 2013年5月24日(金) 14:24
by かずま
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; }
Re: (*this)を返すメンバ関数を持つクラス
Posted: 2013年5月26日(日) 03:05
by zxc
解決しました。
テンプレ-トクラスの定義をcppファイルで行おうとしていたので、すべてヘッダで行うように書き換えたことと、指摘された箇所にconst修飾子を加えたことでコンパイルエラーがなくなりました。
h2so5 さん、かずまさん、分かりやすい御指摘ありがとうございました。