質問内容
下記のコード中にある構造体Aの
operator+の戻り値を
オブジェクトのコピーにして返したいのですが
そうするとコンパイルエラーが発生します。
エラーログではコピーコンストラクタの引数が一致しないと
記載されているようなので試しに
const A&型を引数にするコピーコンストラクタではなく
A&型を引数にしたコピーコンストラクタを追加してみましたが
追加する前と同じエラーログを吐くコンパイルエラーが発生しました。
そこで2つの質問がございます。
・どのように書けばオブジェクトのコピーを返せるようになるのでしょうか?
・なぜこのような問題が発生するのでしょうか?
どうかよろしくお願いします。
ちなみにA&やA&&を返すのならコンパイルエラーは発生しませんでしたが
operator+に関してはコピーを返せるようにしたいので質問させて頂きました。
問題の発生したコード
c++
1#include <iostream> 2using namespace std; 3 4struct A{ 5 int var; 6 7 A(){ 8 this->var = 0; 9 } 10 11 explicit A(const A& copy){ 12 *this=copy; 13 } 14 15 A& operator=(const A& copy){ 16 this->var = copy.var; 17 return *this; 18 } 19 20 A& operator=(const int arg){ 21 this->var = arg; 22 return *this; 23 } 24 25 // 26 // 問題の発生した部分 27 // 28 A operator+(const A& arg)const{ 29 A a; 30 a.var = this->var + arg.var; 31 return a; 32 } 33}; 34 35ostream& operator<<(ostream& os, const A& arg)noexcept{ 36 os << (arg.var); 37 return os; 38} 39 40int main(void){ 41 A a1; 42 A a2; 43 44 a1 = 1; 45 a2 = 2; 46 47 cout << (a1+a2) << endl; 48} 49
エラーログ
terminal
1a.cpp: In member function ‘A A::operator+(const A&)’: 2a.cpp:30:16: error: no matching function for call to ‘A::A(A&)’ 3 return a; 4 ^ 5a.cpp:7:5: note: candidate: A::A() 6 A(){ 7 ^ 8a.cpp:7:5: note: candidate expects 0 arguments, 1 provided 9 10
補足情報(FW/ツールのバージョンなど)
OS:LinuxMint18.3 Cinammon
コンパイラ:g++ 7.4.0
コピーコンストラクターに explicit が付いてるからでは?
回答1件
あなたの回答
tips
プレビュー