回答編集履歴

2

表現の微修正

2023/02/14 06:36

投稿

ozwk
ozwk

スコア13553

test CHANGED
@@ -3,9 +3,10 @@
3
3
 
4
4
  ---
5
5
 
6
- コンパイルはファイル単位で行います
6
+ コンパイルはファイル単位で行います
7
+ また、テンプレートはあくまで「雛形」で、使われているテンプレート引数ごとに別物とみなします。
7
- `TestTemplate.cpp`には`TestTemplate<int>`を使うことがわかりませんので`TestTemplate<int>`は生成されません。
8
+ 今回は、`TestTemplate.cpp`には`TestTemplate<int>`を使うことがわかりませんので`TestTemplate<int>`は生成されません。
8
- しかし`main.cpp`で使おうとしているのでリンクの段階でエラーになります。
9
+ しかし`main.cpp`では`TestTemplate<int>`を使おうとしているのでリンクの段階でエラーになります。
9
10
 
10
11
  ちなみに`TestTemplate.cpp`で`int`を使うことを宣言する。ことでも回避可能ですが、
11
12
  そもそも型を特定せずに書く目的でテンプレートを使っているので、どの型で使われるかを予め宣言するのは目的に合いません。

1

理由の追記

2023/02/14 06:31

投稿

ozwk
ozwk

スコア13553

test CHANGED
@@ -1,2 +1,11 @@
1
1
  `TestTemplate.cpp`の内容を`TestTemplate.h`に書いてください。
2
+ 基本的にテンプレートの実装はヘッダに書きます。
2
3
 
4
+ ---
5
+
6
+ コンパイルはファイル単位で行います、
7
+ `TestTemplate.cpp`には`TestTemplate<int>`を使うことがわかりませんので、`TestTemplate<int>`は生成されません。
8
+ しかし`main.cpp`で使おうとしているのでリンクの段階でエラーになります。
9
+
10
+ ちなみに`TestTemplate.cpp`で`int`を使うことを宣言する。ことでも回避可能ですが、
11
+ そもそも型を特定せずに書く目的でテンプレートを使っているので、どの型で使われるかを予め宣言するのは目的に合いません。