回答編集履歴

3

修正と追記

2017/09/28 13:55

投稿

LouiS0616
LouiS0616

スコア35660

test CHANGED
@@ -158,7 +158,7 @@
158
158
 
159
159
  /* B.hpp */
160
160
 
161
- class A
161
+ class A;
162
162
 
163
163
 
164
164
 
@@ -193,3 +193,9 @@
193
193
  }
194
194
 
195
195
  ```
196
+
197
+
198
+
199
+ ついでにusing namespace std;を排除しました。
200
+
201
+ 使い方を間違えると、名前空間の利益をぶっ壊すので...

2

追記

2017/09/28 13:55

投稿

LouiS0616
LouiS0616

スコア35660

test CHANGED
@@ -89,3 +89,107 @@
89
89
  - メンバ変数の参照
90
90
 
91
91
  - メンバ関数の参照/呼び出し
92
+
93
+
94
+
95
+ ---
96
+
97
+ 実際に組むときは、クラス宣言と実装を分離することで回避できます。
98
+
99
+ ```C++
100
+
101
+ /* A.hpp */
102
+
103
+ // クラスBの前方宣言
104
+
105
+ class B;
106
+
107
+
108
+
109
+ // クラスAの定義
110
+
111
+ class A {
112
+
113
+ private:
114
+
115
+ B *b;
116
+
117
+
118
+
119
+ public:
120
+
121
+ void run1();
122
+
123
+ void run3();
124
+
125
+ };
126
+
127
+ ```
128
+
129
+
130
+
131
+ ```C++
132
+
133
+ /* A.cpp */
134
+
135
+ #include "A.hpp"
136
+
137
+ #include <iostream>
138
+
139
+
140
+
141
+ void A::run1() {
142
+
143
+ b->run2();
144
+
145
+ }
146
+
147
+ void A::run3() {
148
+
149
+ std::cout << "finished" << std::endl;
150
+
151
+ }
152
+
153
+ ```
154
+
155
+
156
+
157
+ ```C++
158
+
159
+ /* B.hpp */
160
+
161
+ class A
162
+
163
+
164
+
165
+ class B {
166
+
167
+ private:
168
+
169
+ A *a;
170
+
171
+ public:
172
+
173
+ void run2();
174
+
175
+ };
176
+
177
+ ```
178
+
179
+
180
+
181
+ ```C++
182
+
183
+ /* B.cpp */
184
+
185
+ #include "B.hpp"
186
+
187
+
188
+
189
+ void B::run2() {
190
+
191
+ a->run3();
192
+
193
+ }
194
+
195
+ ```

1

追記

2017/09/28 13:53

投稿

LouiS0616
LouiS0616

スコア35660

test CHANGED
@@ -77,3 +77,15 @@
77
77
  }
78
78
 
79
79
  ```
80
+
81
+
82
+
83
+ クラスを前方宣言することで**『クラスである』**という情報を前もって与えられます。
84
+
85
+ 逆に言うと、**『クラスである』**という情報を過ぎる次の操作は出来ません。
86
+
87
+ - 実体の宣言
88
+
89
+ - メンバ変数の参照
90
+
91
+ - メンバ関数の参照/呼び出し