前提
ライブラリを作ろうと、C++におけるファイル分割を学習しています。
実現したいこと
- クラスをヘッダーとソースファイルに分ける。
- 他のファイルからクラスを呼び出す。
発生している問題・エラーメッセージ
PS > g++ -c .\packages\sample.cpp PS > g++ -o test .\sample.o .\test_sample.cpp c:/mingw/bin/../lib/gcc/mingw32/9.2.0/../../../../mingw32/bin/ld.exe: C:\Users\iru\AppData\Local\Temp\cccMYCRb.o:test_sample.cpp:(.text+0x3e): undefined reference to `sample::sample::sample<int>(int, int const&)' collect2.exe: error: ld returned 1 exit status
該当のソースコード
package/sample.h
1#pragma once 2 3namespace sample 4{ 5 class sample 6 { 7 public: 8 template <class tp> 9 sample(tp, const int&); 10 void print(); 11 }; 12} 13
package/sample.cpp
1#include "sample.h" 2using namespace sample; 3template <class tp> 4sample::sample::sample(tp, const int&){} 5void sample::sample::print(){} 6
test_sample.cpp
1#include "packages/sample.h" 2 3int main(void) 4{ 5 sample::sample i = *(new sample::sample(1, 2)); 6 i.print(); 7} 8
試したこと
test_sample.cppにてヘッダーではなく, package/sample.cppをincludeするとコンパイルが通りました。
補足情報
端末はWindows11、Visual Studio Codeを利用しています。
ターミナルはpowershellです

回答2件
あなたの回答
tips
プレビュー
下記のような回答は推奨されていません。
このような回答には修正を依頼しましょう。
また依頼した内容が修正された場合は、修正依頼を取り消すようにしましょう。