質問するログイン新規登録

質問編集履歴

2

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

2020/07/29 02:03

投稿

_._._ami
_._._ami

スコア26

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

1

解決したところを追記

2020/07/29 02:03

投稿

_._._ami
_._._ami

スコア26

title CHANGED
@@ -1,1 +1,1 @@
1
- c++ 参照のやり方について
1
+ c++ 参照 class
body CHANGED
@@ -1,5 +1,7 @@
1
1
  //で書かれているコメントの指示を完成させたいのですが,間違えているところや空欄の部分を一部でもわかるところを教えて頂けると助かります.
2
2
 
3
+ 追記:f4まではあってました! classのところからが分からないです.
4
+
3
5
  ```c++
4
6
  #include <iostream>
5
7
  using namespace std;
@@ -11,10 +13,7 @@
11
13
  }
12
14
  double f2(double& a)
13
15
  {
14
- // a に 1 を加算.a の値を返すように処理を追加すること
15
- double x;
16
- x = a;
17
- x = x + 1;
16
+ a = a + 1;
18
17
  return a;
19
18
  }
20
19
  double f2p(double* a)
@@ -28,11 +27,6 @@
28
27
  return a;
29
28
  }
30
29
 
31
- // 関数 f4 を作成する.
32
- // 引数: double 型変数の参照を一つ
33
- // 戻り値: 受け取った引数の参照
34
- // 処理内容: 引数の値を 1 加算
35
- // (1)の行で 9 と出力されるように作成すること
36
30
  double& f4(double& a)
37
31
  {
38
32
  a = a + 1;