
今、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で質問しましょう!
関連するカテゴリからQ&Aを探す
今、見られている記事はコレ!
-
弁護士が解説!あなたの声を行政に届ける「パブリックコメント」制度のすべて
社会に対する意見や不満、疑問。それを発信する場所は、SNSやブログ、そしてニュースサイトのコメント欄など多岐にわたる。教えて!gooでも「ヤフコメ民について」というタイトルのトピックがあり、この投稿の通り、...
-
弁護士が語る「合法と違法を分けるオンラインカジノのシンプルな線引き」
「お金を賭けたら違法です」ーーこう答えたのは富士見坂法律事務所の井上義之弁護士。オンラインカジノが違法となるかどうかの基準は、このように非常にシンプルである。しかし2025年にはいって、違法賭博事件が相次...
-
釣りと密漁の違いは?知らなかったでは済まされない?事前にできることは?
知らなかったでは済まされないのが法律の世界であるが、全てを知ってから何かをするには少々手間がかかるし、最悪始めることすらできずに終わってしまうこともあり得る。教えてgooでも「釣りと密漁の境目はどこです...
-
カスハラとクレームの違いは?カスハラの法的責任は?企業がとるべき対応は?
東京都が、客からの迷惑行為などを称した「カスタマーハラスメント」、いわゆる「カスハラ」の防止を目的とした条例を、全国で初めて成立させた。条例に罰則はなく、2025年4月1日から施行される。 この動きは自治体...
-
なぜ批判コメントをするの?その心理と向き合い方をカウンセラーにきいた!
今や生活に必要不可欠となったインターネット。手軽に情報を得られるだけでなく、ネットを介したコミュニケーションも一般的となった。それと同時に顕在化しているのが、他者に対する辛らつな意見だ。ネットニュース...
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
C言語での引数の省略方法
-
「指定されたキャストは有効で...
-
複数桁10進数の*桁目だけを抽出...
-
#define _CRT_SECURE_NO_WARNIN...
-
if と配列の組み合わせ
-
式は定数値が必要です」という...
-
ラップ関数とはどんなものですか?
-
【C++】関数ポインタの使い方
-
C言語 エラーの原因がわからな...
-
C言語初心者です、、、お助けく...
-
整数データの配列から同じ値の...
-
数字列を3桁ごとにカンマで区切...
-
struct tanka_kosuu kosuu[10];...
-
エラー 添字が付けられた値が、...
-
iTRONプログラミング
-
PowerShellがうまくいかない
-
毎回違う乱数を生成するにはど...
-
入力を待たずにstdinの監視をし...
-
C言語 逆順の配列の仕方を教え...
-
C++でvectorにテキストファイル...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
複数桁10進数の*桁目だけを抽出...
-
「指定されたキャストは有効で...
-
C言語での引数の省略方法
-
#define _CRT_SECURE_NO_WARNIN...
-
C言語 エラーの原因がわからな...
-
ラップ関数とはどんなものですか?
-
【C++】関数ポインタの使い方
-
if と配列の組み合わせ
-
(int *)の意味
-
ColorをRGBで指定する方法
-
未解決の外部シンボル _printf...
-
構造体の勉強中です 合計点の高...
-
商と剰余を同時に求める(C言語)
-
C言語で分からないところがあり...
-
式は定数値が必要です」という...
-
C言語での奇数の和
-
std::set<int> で、ある値が何...
-
課題でつまってます・・・
-
int16_t の _t は何?
-
比較回数と交換回数表示について
おすすめ情報