質問編集履歴

2

書き直したコードとエラーを追加しました

2020/07/29 02:03

投稿

_._._ami
_._._ami

スコア26

test CHANGED
File without changes
test CHANGED
@@ -2,7 +2,77 @@
2
2
 
3
3
 
4
4
 
5
+ 追記:f4まではあってました! 
6
+
5
- 追記:f4まではあってました! classのところからが分からないです.
7
+ classのところからが分からないです.
8
+
9
+ 全部自分で埋めてみたのですが以下のエラーがでます.
10
+
11
+ ```
12
+
13
+ 11th.ref.cpp:87:8: error: class member cannot be redeclared
14
+
15
+ double sum(XYZ a){
16
+
17
+ ^
18
+
19
+ 11th.ref.cpp:76:16: note: previous definition is here
20
+
21
+ double sum(XYZ a)
22
+
23
+ ^
24
+
25
+ 11th.ref.cpp:175:2: error: expected '}'
26
+
27
+ }
28
+
29
+ ^
30
+
31
+ 11th.ref.cpp:51:10: note: to match this '{'
32
+
33
+ class XYZ{
34
+
35
+ ^
36
+
37
+ 11th.ref.cpp:107:12: error: no viable conversion from returned value of type 'double' to
38
+
39
+ function return type 'XYZ'
40
+
41
+ return a.x*a.y*a.z;
42
+
43
+ ^~~~~~~~~~~
44
+
45
+ 11th.ref.cpp:51:7: note: candidate constructor (the implicit copy constructor) not viable:
46
+
47
+ no known conversion from 'double' to 'const XYZ &' for 1st argument
48
+
49
+ class XYZ{
50
+
51
+ ^
52
+
53
+ 11th.ref.cpp:51:7: note: candidate constructor (the implicit move constructor) not viable:
54
+
55
+ no known conversion from 'double' to 'XYZ &&' for 1st argument
56
+
57
+ class XYZ{
58
+
59
+ ^
60
+
61
+ 11th.ref.cpp:173:10: error: invalid operands to binary expression ('std::__1::ostream'
62
+
63
+ (aka 'basic_ostream<char>') and 'XYZ')
64
+
65
+ cout << f7(xyz) << "\n";
66
+
67
+ ~~~~ ^ ~~~~~~~
68
+
69
+ 11th.ref.cpp:175:2: error: expected ';' after class
70
+
71
+ }
72
+
73
+ ^
74
+
75
+ ```
6
76
 
7
77
 
8
78
 
@@ -14,9 +84,11 @@
14
84
 
15
85
 
16
86
 
87
+ // 課題の指示は,// のコメントに書かれている /**/ の方は無視しても構わないが,参考にしてもらいたい.
88
+
17
89
  double f1(double a)
18
90
 
19
- {
91
+ {
20
92
 
21
93
  a = a + 1;
22
94
 
@@ -48,8 +120,6 @@
48
120
 
49
121
  {
50
122
 
51
-
52
-
53
123
  return a;
54
124
 
55
125
  }
@@ -60,9 +130,9 @@
60
130
 
61
131
  {
62
132
 
63
- a = a + 1;
133
+ a = a + 1;
64
-
134
+
65
- return a;
135
+ return a;
66
136
 
67
137
  }
68
138
 
@@ -76,7 +146,7 @@
76
146
 
77
147
  XYZ(double xa, double ya, double za){
78
148
 
79
- // メンバ変数の x, y, z をそれぞれ xa, ya, za で初期化すること
149
+ // メンバ変数の x, y, z をそれぞれ xa, xy, za で初期化すること
80
150
 
81
151
  (*this).x = xa;
82
152
 
@@ -88,7 +158,7 @@
88
158
 
89
159
  void add(double xa, double ya, double za){
90
160
 
91
- // メンバ変数の x, y, z にそれぞれ xa, ya, za を加算すること
161
+ // メンバ変数の x, y, z にそれぞれ xa, xy, za を加算すること
92
162
 
93
163
  x += xa;
94
164
 
@@ -98,9 +168,11 @@
98
168
 
99
169
  }
100
170
 
171
+
172
+
101
173
  double& getRef(int i){
102
174
 
103
- // i = 1 なら x,i = 2 なら y, i = 3 なら z の参照を返すこと
175
+ //i = 1 なら x,i = 2 なら y, i = 3 なら z の参照を返すこと
104
176
 
105
177
  if(i==1) return x;
106
178
 
@@ -108,8 +180,6 @@
108
180
 
109
181
  if(i==3) return z;
110
182
 
111
-
112
-
113
183
  }
114
184
 
115
185
  friend double sum(XYZ a); // (4)
@@ -118,7 +188,15 @@
118
188
 
119
189
  // f7 や sum はそもそもメンバ関数として実装すれば friend など必要ないのだが,ここでは練習のためにこの実装に取り組んでもらいたい.
120
190
 
191
+ double sum(XYZ a)
192
+
193
+ {
194
+
195
+ double x,y,z;
196
+
197
+ return x+y+z;
198
+
121
- };
199
+ }
122
200
 
123
201
 
124
202
 
@@ -152,7 +230,15 @@
152
230
 
153
231
  // (2) の行で 9 と出力されるように作成すること
154
232
 
155
-
233
+ XYZ& f6(XYZ& a){
234
+
235
+ x = x+1;
236
+
237
+ y = y+1;
238
+
239
+ z = z+1;
240
+
241
+ }
156
242
 
157
243
  // 関数 f7 を作成する
158
244
 
@@ -162,6 +248,14 @@
162
248
 
163
249
  // 処理内容: 引数のメンバ x, y, z の積を返す
164
250
 
251
+ XYZ f7(XYZ a){
252
+
253
+ return a.x*a.y*a.z;
254
+
255
+ }
256
+
257
+
258
+
165
259
 
166
260
 
167
261
  // 正しい出力を以下に示す.同じになるよう頑張ってもらいたい.
@@ -254,8 +348,6 @@
254
348
 
255
349
  cout << "--- class part ---\n";
256
350
 
257
- // まずここより上部が正しく実行されるか,最初は以下をコメントアウトするなどして動作を確認したほうが良い.
258
-
259
351
 
260
352
 
261
353
  XYZ xyz(1,1,1);

1

解決したところを追記

2020/07/29 02:03

投稿

_._._ami
_._._ami

スコア26

test CHANGED
@@ -1 +1 @@
1
- c++ 参照のやり方について
1
+ c++ 参照 class
test CHANGED
@@ -2,6 +2,10 @@
2
2
 
3
3
 
4
4
 
5
+ 追記:f4まではあってました! classのところからが分からないです.
6
+
7
+
8
+
5
9
  ```c++
6
10
 
7
11
  #include <iostream>
@@ -24,13 +28,7 @@
24
28
 
25
29
  {
26
30
 
27
- // a に 1 を加算.a の値を返すように処理を追加すること
28
-
29
- double x;
30
-
31
- x = a;
32
-
33
- x = x + 1;
31
+ a = a + 1;
34
32
 
35
33
  return a;
36
34
 
@@ -58,108 +56,98 @@
58
56
 
59
57
 
60
58
 
59
+ double& f4(double& a)
60
+
61
+ {
62
+
63
+ a = a + 1;
64
+
65
+ return a;
66
+
67
+ }
68
+
69
+
70
+
71
+ class XYZ{
72
+
73
+ double x, y, z;
74
+
75
+ public:
76
+
77
+ XYZ(double xa, double ya, double za){
78
+
79
+ // メンバ変数の x, y, z をそれぞれ xa, ya, za で初期化すること
80
+
81
+ (*this).x = xa;
82
+
83
+ (*this).y = ya;
84
+
85
+ (*this).z = za;
86
+
87
+ }
88
+
89
+ void add(double xa, double ya, double za){
90
+
91
+ // メンバ変数の x, y, z にそれぞれ xa, ya, za を加算すること
92
+
93
+ x += xa;
94
+
95
+ y += ya;
96
+
97
+ z += za;
98
+
99
+ }
100
+
101
+ double& getRef(int i){
102
+
103
+ // i = 1 なら x,i = 2 なら y, i = 3 なら z の参照を返すこと
104
+
105
+ if(i==1) return x;
106
+
107
+ if(i==2) return y;
108
+
109
+ if(i==3) return z;
110
+
111
+
112
+
113
+ }
114
+
115
+ friend double sum(XYZ a); // (4)
116
+
117
+ // f7 の関数が private メンバ x, y, z を参照できるように,friend 指定をして以下に記述.(4) の sum を参考にすること.
118
+
119
+ // f7 や sum はそもそもメンバ関数として実装すれば friend など必要ないのだが,ここでは練習のためにこの実装に取り組んでもらいたい.
120
+
121
+ };
122
+
123
+
124
+
125
+ XYZ& f5(XYZ& a){
126
+
127
+
128
+
129
+ return a;
130
+
131
+ }
132
+
133
+
134
+
135
+ double sum(XYZ a){
136
+
137
+ // (4) で friend が指定されているため,XYZ の private メンバである x, y, z を参照可能
138
+
139
+ return a.x + a.y + a.z;
140
+
141
+ }
142
+
143
+
144
+
61
- // 関数 f4 を作成する.
145
+ // 関数 f6 を作成する.
62
-
146
+
63
- // 引数: double 型変数の参照を一つ
147
+ // 引数: XYZ 型変数の参照を一つ
64
148
 
65
149
  // 戻り値: 受け取った引数の参照
66
150
 
67
- // 処理内容: 引数の値を 1 加算
68
-
69
- // (1)の行で 9 と出力されるように作成すること
70
-
71
- double& f4(double& a)
72
-
73
- {
74
-
75
- a = a + 1;
76
-
77
- return a;
78
-
79
- }
80
-
81
-
82
-
83
- class XYZ{
84
-
85
- double x, y, z;
86
-
87
- public:
88
-
89
- XYZ(double xa, double ya, double za){
90
-
91
- // メンバ変数の x, y, z をそれぞれ xa, ya, za で初期化すること
92
-
93
- (*this).x = xa;
94
-
95
- (*this).y = ya;
96
-
97
- (*this).z = za;
98
-
99
- }
100
-
101
- void add(double xa, double ya, double za){
102
-
103
- // メンバ変数の x, y, z にそれぞれ xa, ya, za を加算すること
104
-
105
- x += xa;
106
-
107
- y += ya;
108
-
109
- z += za;
110
-
111
- }
112
-
113
- double& getRef(int i){
114
-
115
- // i = 1 なら x,i = 2 なら y, i = 3 なら z の参照を返すこと
116
-
117
- if(i==1) return x;
118
-
119
- if(i==2) return y;
120
-
121
- if(i==3) return z;
122
-
123
-
124
-
125
- }
126
-
127
- friend double sum(XYZ a); // (4)
128
-
129
- // f7 の関数が private メンバ x, y, z を参照できるように,friend 指定をして以下に記述.(4) の sum を参考にすること.
130
-
131
- // f7 や sum はそもそもメンバ関数として実装すれば friend など必要ないのだが,ここでは練習のためにこの実装に取り組んでもらいたい.
132
-
133
- };
134
-
135
-
136
-
137
- XYZ& f5(XYZ& a){
138
-
139
-
140
-
141
- return a;
142
-
143
- }
144
-
145
-
146
-
147
- double sum(XYZ a){
148
-
149
- // (4) で friend が指定されているため,XYZ の private メンバである x, y, z を参照可能
150
-
151
- return a.x + a.y + a.z;
152
-
153
- }
154
-
155
-
156
-
157
- // 関数 f6 を作成する.
158
-
159
- // 引数: XYZ 型変数の参照を一つ
160
-
161
- // 戻り値: 受け取った引数の参照
162
-
163
151
  // 処理内容: 引数メンバ変数 x, y, z の値を全て 1 加算
164
152
 
165
153
  // (2) の行で 9 と出力されるように作成すること