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

質問編集履歴

3

エラーの追記

2020/04/12 13:53

投稿

jasmine-jp
jasmine-jp

スコア15

title CHANGED
File without changes
body CHANGED
@@ -34,4 +34,8 @@
34
34
  cout << "トータルのカウント数:" << Counter::getTotalCount() << endl;
35
35
  return 0;
36
36
  }
37
+ ```
38
+ ```error
39
+ undefined reference to `Counter::m_totalCount'
40
+ collect2.exe: error: ld returned 1 exit status
37
41
  ```

2

質問の追加

2020/04/12 13:53

投稿

jasmine-jp
jasmine-jp

スコア15

title CHANGED
File without changes
body CHANGED
@@ -1,6 +1,10 @@
1
1
  ##質問
2
2
  静的メンバ関数の戻り値に静的メンバ変数を設定するとエラーがおきます。
3
3
  静的メンバ変数を戻り値に設定しているコードが見つからなかったので困っています。
4
+ また、静的と非静的の違いは
5
+ ・メインコードに書くときにクラス名をつける必要がある
6
+ ・静的関数から非静的関数は呼び出せない
7
+ 以外に何かあるのでしょうか
4
8
  ```問題のコード
5
9
  class Counter{
6
10
  private:
@@ -15,6 +19,7 @@
15
19
  m_totalcount = 0;
16
20
  }
17
21
  void Counter::count(){
22
+  m_count++;
18
23
  m_totalCount++;
19
24
  }
20
25
 

1

質問の変更

2020/04/12 13:41

投稿

jasmine-jp
jasmine-jp

スコア15

title CHANGED
File without changes
body CHANGED
@@ -1,71 +1,32 @@
1
- ## 質問
1
+ ##質問
2
- 以下の問題が分かりません。
3
- mainの18行目に出ている、c1.getCount() + c2.getCount()を、クラスCounterの静的メソッドによって出力できるようにプログラムを改造しなさい。その際、以下のようにクラスCounterを変更すること。
4
- ##条件
5
- 1.作成する静的メンバ関数の名前は、getTotalCount()とする。(戻り値はint)
2
+ 静的メンバ関数の戻り値に静的メンバ変数を設定するとエラーがおきます。
6
- 2.この関数内では、トータルのカウント回数を記録した静的メンバ変数を、m_totalCountとする。
3
+ 静的メンバ変数を戻り値に設定していコードが見つからなかったので困っています
7
- ##実行結果
8
- c1のカウント数:3
9
- c2のカウント数:1
10
- トータルのカウント数:4
11
- ##コード
12
- ```header
4
+ ```問題のコード
13
- #ifndef _COUNTER_H_
14
- #define _COUNTER_H_
15
-
16
5
  class Counter{
17
6
  private:
18
- // 回数
19
- int m_count;
7
+ int m_count;
8
+ static int m_totalCount;
20
9
  public:
21
- // コンストラクタ
22
- Counter();
23
- // リセット
24
- void reset();
25
- // カウント
26
- void count();
27
- // カウントの数
28
- int getCount();
10
+ static int getTotalCount();
29
11
  };
30
-
12
+ -----------------------------------------------------
31
- #endif // _COUNTER_H_
13
+ Counter::Counter() : m_count(0)
32
- ```
14
+ {
15
+ m_totalcount = 0;
16
+ }
17
+ void Counter::count(){
33
- ```main
18
+ m_totalCount++;
19
+ }
20
+
21
+ int Counter::getTotalCount(){
34
- #include <iostream>
22
+ return m_totalCount;
35
-
23
+ }
36
- #include "counter.h"
24
+ -----------------------------------------------------
37
-
38
- using namespace std;
39
-
40
25
  int main(){
41
26
  Counter c1, c2;
42
27
  c1.count();
43
28
  c2.count();
44
- c2.count();
45
- c2.reset();
46
- c1.count();
47
- c1.count();
48
- c2.count();
49
- cout << "c1のカウント数:" << c1.getCount() << endl;
50
- cout << "c2のカウント数:" << c2.getCount() << endl;
51
- cout << "トータルのカウント数:" << c1.getCount() + c2.getCount() << endl;
29
+ cout << "トータルのカウント数:" << Counter::getTotalCount() << endl;
52
30
  return 0;
53
31
  }
54
- ```
55
- ```func
56
- #include "counter.h"
57
-
58
- // コンストラクタ(カウント回数を0で初期化)
59
- Counter::Counter() : m_count(0)
60
- {
61
- }
62
- void Counter::reset(){
63
- m_count = 0;
64
- }
65
- void Counter::count(){
66
- m_count++;
67
- }
68
- int Counter::getCount(){
69
- return m_count;
70
- }
71
32
  ```