今、C++でテンプレートクラスや演算子オーバーロードを使ったプログラムの練習をしているのですが、どうしてもうまく動かなく質問させてもらうことにしました。
大まかに言えば、int型のvalueを持ったDataというクラスを用意し、演算子+と-のオーバーロードによって、クラスの足し算引き算を可能にしよう。ということなのですが、
それぞれのオーバーロードした演算子ともに、addSubtractという+と-両方に対応した関数を呼ぶことで使おうと思っています。
コードは以下のようになっています。
1 #include <iostream>
2
3 using namespace std;
4
5 template<class Comparable>
6 class Data {
7 public:
8 Data(){value = 0;}
9 Data(int i){value = i;}
10 int value;
11 Data<Comparable> operator+(const Data<Comparable> &);
12 Data<Comparable> operator-(const Data<Comparable> &);
13 Data<Comparable> Data<Comparable>::addSubtract(const Data<Comparable> & rhs, int sign);
14 };
15
16 template<class Comparable>
17 Data<Comparable> Data<Comparable>::addSubtract(const 18 Data<Comparable> & rhs, int sign) {
18 int value1=this->value;
19 int value2=rhs.value;
20 Data<int> result(value1+(sign*value2));
21 return result;
22 }
23
24 template<class Comparable >
25 Data<Comparable> Data<Comparable>::operator+(const Data<Comparable> & rhs) {
26 return addSubtract(&rhs, 1);
27 }
28
29 template<class Comparable >
30 Data<Comparable> Data<Comparable>::operator-(const 31 Data<Comparable> & rhs) {
31 return addSubtract(&rhs, -1);
32 }
33
34 int main() {
35 Data<int> matrix1(2);
36 Data<int> matrix2(1);
37 cout<<"data1:"<<matrix1.value<<endl;
38 cout<<"data2:"<<matrix2.value<<endl;
39
40 Data<int> result1 = matrix1+matrix2;
41 cout<<"data1+data2"<<result1.value<<endl;
42
43 Data<int> result = matrix1-matrix2;
44 cout<<"data1-data2"<<result2.value<<endl;
45 }
このコードを実行したところ、以下のようなエラーメッセージが表示されて動かすことができません。
add.cpp:41: instantiated from here
add.cpp:26: error: invalid conversion from `const Data<int>*' to `int'
add.cpp:26: error: initializing argument 1 of Data<Comparable>::Data(int) [with Comparable = int]'
アドバイスをいただけるとありがたいです。
No.2
- 回答日時:
すみませんさっきの投稿は完全に読み違えてました。
21,26,31行目でDataを値で返しているので、Dataのコピーコンストラクタをちゃんと定義してやるとよいのではないでしょうか。
No.1
- 回答日時:
特殊化された定義
std::ostream& operator << (std::ostream&, const Data<int>&)
を与えてやるか、
Data の operator int() を定義してやったらどうでしょうか
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# C++プログラミングコードにポリモーフィズムを取り入れ方を教えてください。 2 2023/06/09 11:17
- C言語・C++・C# 10個の実数に対する降順ソート結果を出力するプログラムを作りたいのですが、以下のプログラムをどう直せ 1 2022/07/09 22:16
- C言語・C++・C# c言語の問題です 課題1 (二分探索木とセット) 大きさ size の配列 array を考える。す 2 2023/01/10 21:08
- C言語・C++・C# C#テキストボックスの文字を配列にいれてその後表示する 4 2022/07/17 04:47
- その他(プログラミング・Web制作) Python - Excel で Webからデータを連続取得したいのですが エラーが出ます 1 2023/07/06 20:08
- C言語・C++・C# c言語の問題です 3 2023/01/10 16:15
- その他(プログラミング・Web制作) pythonでDBのカラム名で取得したオブジェクトの値を表示したい 1 2022/05/13 03:41
- Visual Basic(VBA) 複数シート一括作成後に、特定範囲の数式は値で貼り付けしたい 3 2022/10/07 11:18
- C言語・C++・C# pythonのファイルの並びでの読み込みとリストについて 4 2022/04/13 03:52
- C言語・C++・C# プログラミングの問題です。写真のプログラムの1から10を下のように入力しましたがプログラムが上手くい 3 2022/07/01 23:31
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
#define _CRT_SECURE_NO_WARNIN...
-
ファイルから読みこむ方法
-
「指定されたキャストは有効で...
-
C言語での引数の省略方法
-
if と配列の組み合わせ
-
C#の質問
-
複数桁10進数の*桁目だけを抽出...
-
【C言語】円の面積を求めるプロ...
-
PowerShellがうまくいかない
-
ポインタによる関数への配列渡し
-
式は定数値が必要です」という...
-
C言語 エラーの原因がわからな...
-
【C++】関数ポインタの使い方
-
C言語で行列の積を計算できるよ...
-
演算子オーバーロードのプログ...
-
double型の値を、一桁ずつint型...
-
C++ グラフ作成
-
c言語の配列を使ってサイコロを...
-
因数分解を行うプログラムについて
-
課題でつまってます・・・
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
「指定されたキャストは有効で...
-
C言語での引数の省略方法
-
#define _CRT_SECURE_NO_WARNIN...
-
複数桁10進数の*桁目だけを抽出...
-
【C++】関数ポインタの使い方
-
C言語 エラーの原因がわからな...
-
c++でテンプレートのコードでわ...
-
(int *)の意味
-
ラップ関数とはどんなものですか?
-
数字列を3桁ごとにカンマで区切...
-
c言語のリダイレクトによる円...
-
比較回数と交換回数表示について
-
実数の整数部,小数部の取得
-
if と配列の組み合わせ
-
構造体の勉強中です 合計点の高...
-
PowerShellがうまくいかない
-
c言語の配列を使ってサイコロを...
-
課題でつまってます・・・
-
C言語のサイコロシミュレート
-
エラー 添字が付けられた値が、...
おすすめ情報