- 【初心者歓迎】C/C++室 Ver.94【環境依存OK】 [転載禁止]©2ch.net
146 :デフォルトの名無しさん[sage]:2014/12/12(金) 18:47:21.80 ID:msKuYMsR - +演算子のオーバーロードに関する質問なんですけど、
次のようなクラスがあったとして、 template<typename T> class A { public: A(T val_) : val(val_) {} ... private: T val; }; このクラスのための+演算子(2項バージョン)を実装したいと思って、 template<typename T> A<T>& operator+(const A<T>& lhs, const A<T>& rhs) { ... return ret; } というようなものを作ったんですけど、次のようにするとエラーがでてしまいます A<int> a(1), a2(2); A<int> a3 = a1 + a2; A<int> a4 = a3 + 1; //←ここでエラー ここでintからA<int>への変換が働いてうまく動くと期待したんですが、ダメでした こういうコードが動くように+演算子を実装したいんですけどどうすればいいですか?
|
- 【初心者歓迎】C/C++室 Ver.94【環境依存OK】 [転載禁止]©2ch.net
149 :146[sage]:2014/12/12(金) 19:01:29.43 ID:msKuYMsR - コンパイル時に、たくさんエラーメッセージが出るんですが、だいたい以下のようなかんじです
...テンプレート 引数を 'const A<T> &' に対して 'int' から減少できませんでした ...クラス、構造体、共用体に既定のコンストラクターがありません ...これらのオペランドと一致する演算子 "+" はありません オペランドの型: A<int> + int
|
- 【初心者歓迎】C/C++室 Ver.94【環境依存OK】 [転載禁止]©2ch.net
150 :146[sage]:2014/12/12(金) 19:13:12.95 ID:msKuYMsR - >>146で
A<T>& operator+(const A<T>& lhs, const A<T>& rhs) のところで A<T>&となってるのは2chに書き込むときのミスです A<T>&→ A<T>& に修正します、すいません
|
- 【初心者歓迎】C/C++室 Ver.94【環境依存OK】 [転載禁止]©2ch.net
151 :146[sage]:2014/12/12(金) 19:21:25.51 ID:msKuYMsR - >>148
ありがとう、動きました ただ、左オペランドがTのバージョンも書く必要がある思いますけど、 そういうものなんでしょうか?
|