//で書かれているコメントの指示を完成させたいのですが,間違えているところや空欄の部分を一部でもわかるところを教えて頂けると助かります.
追記:f4まではあってました!
classのところからが分からないです.
全部自分で埋めてみたのですが以下のエラーがでます.
11th.ref.cpp:87:8: error: class member cannot be redeclared double sum(XYZ a){ ^ 11th.ref.cpp:76:16: note: previous definition is here double sum(XYZ a) ^ 11th.ref.cpp:175:2: error: expected '}' } ^ 11th.ref.cpp:51:10: note: to match this '{' class XYZ{ ^ 11th.ref.cpp:107:12: error: no viable conversion from returned value of type 'double' to function return type 'XYZ' return a.x*a.y*a.z; ^~~~~~~~~~~ 11th.ref.cpp:51:7: note: candidate constructor (the implicit copy constructor) not viable: no known conversion from 'double' to 'const XYZ &' for 1st argument class XYZ{ ^ 11th.ref.cpp:51:7: note: candidate constructor (the implicit move constructor) not viable: no known conversion from 'double' to 'XYZ &&' for 1st argument class XYZ{ ^ 11th.ref.cpp:173:10: error: invalid operands to binary expression ('std::__1::ostream' (aka 'basic_ostream<char>') and 'XYZ') cout << f7(xyz) << "\n"; ~~~~ ^ ~~~~~~~ 11th.ref.cpp:175:2: error: expected ';' after class } ^
c++
1#include <iostream> 2using namespace std; 3 4// 課題の指示は,// のコメントに書かれている /**/ の方は無視しても構わないが,参考にしてもらいたい. 5double f1(double a) 6{ 7 a = a + 1; 8 return a; 9} 10double f2(double& a) 11{ 12 a = a + 1; 13 return a; 14} 15double f2p(double* a) 16{ 17 *a = *a + 1; 18 return *a; 19} 20double& f3(double& a) 21{ 22 return a; 23} 24 25double& f4(double& a) 26{ 27 a = a + 1; 28 return a; 29} 30 31class XYZ{ 32 double x, y, z; 33public: 34 XYZ(double xa, double ya, double za){ 35 // メンバ変数の x, y, z をそれぞれ xa, xy, za で初期化すること 36 (*this).x = xa; 37 (*this).y = ya; 38 (*this).z = za; 39 } 40 void add(double xa, double ya, double za){ 41 // メンバ変数の x, y, z にそれぞれ xa, xy, za を加算すること 42 x += xa; 43 y += ya; 44 z += za; 45 } 46 47 double& getRef(int i){ 48 //i = 1 なら x,i = 2 なら y, i = 3 なら z の参照を返すこと 49 if(i==1) return x; 50 if(i==2) return y; 51 if(i==3) return z; 52 } 53 friend double sum(XYZ a); // (4) 54 // f7 の関数が private メンバ x, y, z を参照できるように,friend 指定をして以下に記述.(4) の sum を参考にすること. 55 // f7 や sum はそもそもメンバ関数として実装すれば friend など必要ないのだが,ここでは練習のためにこの実装に取り組んでもらいたい. 56 double sum(XYZ a) 57 { 58 double x,y,z; 59 return x+y+z; 60 } 61 62XYZ& f5(XYZ& a){ 63 64 return a; 65} 66 67double sum(XYZ a){ 68 // (4) で friend が指定されているため,XYZ の private メンバである x, y, z を参照可能 69 return a.x + a.y + a.z; 70} 71 72// 関数 f6 を作成する. 73// 引数: XYZ 型変数の参照を一つ 74// 戻り値: 受け取った引数の参照 75// 処理内容: 引数メンバ変数 x, y, z の値を全て 1 加算 76// (2) の行で 9 と出力されるように作成すること 77XYZ& f6(XYZ& a){ 78 x = x+1; 79 y = y+1; 80 z = z+1; 81} 82// 関数 f7 を作成する 83// 引数: XYZ 型変数を一つ 84// 戻り値: double 型 85// 処理内容: 引数のメンバ x, y, z の積を返す 86XYZ f7(XYZ a){ 87 return a.x*a.y*a.z; 88} 89 90 91// 正しい出力を以下に示す.同じになるよう頑張ってもらいたい. 92// --- basic type part --- 93// 1 94// 2 95// 1 96// 2 97// 3 98// 4 99// 4 100// 4 101// 4 102// 5 103// 6 104// 9 105// --- class part --- 106// 9 107// 10 108// 11 109// 9 110// 18 111// 210 112 113int main() 114{ 115 double x = 1; 116 cout << "--- basic type part ---\n"; 117 cout << x << "\n"; 118 cout << f1(x) << "\n"; 119 cout << x << "\n"; 120 f2(x); /* equivalent to x = x + 1;*/ 121 cout << x << "\n"; 122 cout << f2(x) << "\n"; 123 cout << f2p(&x) << "\n"; 124 cout << x << "\n"; 125 f3(x) = 4; /* equivalent to x = 4;*/ 126 cout << x << "\n"; 127 cout << f3(x) << "\n"; 128 f3(f3(x)) = 5; /* equivalent to x = 5;*/ 129 cout << x << "\n"; 130 f4(x); // equivalent to x = x + 1; 131 cout << x << "\n"; 132 f4(f4(f4(x))); /* equivalent to x = x + 1; x = x + 1; x = x + 1;*/ 133 cout << x << "\n"; // (1) 134 135 cout << "--- class part ---\n"; 136 137 XYZ xyz(1,1,1); 138 xyz.add(1,1,1); 139 f5(xyz).add(7, 8, 9); /* equivalent to xyz.add(7, 8, 9);*/ 140 141 cout << xyz.getRef(1) << "\n"; 142 cout << xyz.getRef(2) << "\n"; 143 cout << xyz.getRef(3) << "\n"; 144 145 xyz.getRef(1) = 1; 146 xyz.getRef(2) = 2; 147 xyz.getRef(3) = 3; 148 f6(xyz); 149 cout << sum(xyz) << "\n"; // (2) 150 f6(f6(f6(xyz))); 151 cout << xyz.getRef(1) + xyz.getRef(2) + xyz.getRef(3) << "\n"; // (3), sum(xyz) と同値である. 152 cout << f7(xyz) << "\n"; 153 return 0; 154}
class XYZ { に対し }; がありません。コンパイルエラー。
回答1件
あなたの回答
tips
プレビュー