質問編集履歴
2
書き直したコードとエラーを追加しました
test
CHANGED
File without changes
|
test
CHANGED
@@ -2,7 +2,77 @@
|
|
2
2
|
|
3
3
|
|
4
4
|
|
5
|
+
追記:f4まではあってました!
|
6
|
+
|
5
|
-
|
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, y
|
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, y
|
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
|
-
//
|
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
解決したところを追記
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
|
-
|
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
|
-
// 関数 f
|
145
|
+
// 関数 f6 を作成する.
|
62
|
-
|
146
|
+
|
63
|
-
// 引数:
|
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 と出力されるように作成すること
|