回答編集履歴
1
追記
answer
CHANGED
@@ -1,5 +1,5 @@
|
|
1
|
-
C++では
|
1
|
+
C++ではソースコードはファイル単位でコンパイルされるため、あるソースファイルをプリプロセッサが展開した時点で**そのファイルだけで**全ての型が決定できる必要があります。
|
2
|
-
sub.hはmainのあるソース
|
2
|
+
しかし、sub.hはmainのあるソースコードにプリプロセッサで展開すると
|
3
3
|
|
4
4
|
```C++
|
5
5
|
class C {
|
@@ -12,8 +12,7 @@
|
|
12
12
|
c();
|
13
13
|
}
|
14
14
|
```
|
15
|
-
|
16
|
-
|
15
|
+
となり、operator()の戻り値の型は決定できずエラーになります。
|
17
16
|
インラインにすると
|
18
17
|
|
19
18
|
```C++
|
@@ -31,4 +30,4 @@
|
|
31
30
|
}
|
32
31
|
```
|
33
32
|
ですからreturn 0 から 戻り値の型はintに決定できるのでコンパイルできます。
|
34
|
-
複数のソース
|
33
|
+
複数のソースに分かれている内容がくっつくのはそれぞれのコンパイルが終わってリンクをする段階なのでコンパイラは別のソースコードから型を決定できないのです。
|