我們在實際專案中一般習慣標頭檔案(.h)和原始檔(.cpp)分開寫,這樣做的好處良多,但是如果遇到了類模板,這樣可能會有一點兒問題。
我們通過乙個例子來看:
person.h:
1person.cpp:#pragma once
2 #include
3 #include4
using
namespace
std;
56 template
7class
person ;
1 #include"main.cpp:person.h"2
3 template
4 person::person(nametype name,agetype age)59
10 template
11void person::show()
12
1 #include2編譯發現如下錯誤:using
namespace
std;
3 #include "
person.h"4
void
test()59
intmain()
10
錯誤原因分析:
由於類模板的成員函式是執行時才會建立,所以分檔案編寫時編譯器找不到成員函式的實現
問題解決:
方法一(不推薦)
直接在main.cpp裡將person.cpp包含進來,如下所示:
1 #include2方法二(推薦)using
namespace
std;
3 #include "
person.cpp"4
void
test()59
intmain()
10
將person.h、person.cpp的內容全部放入同乙個檔案person.hpp中,然後在main.cpp中將person.hpp包含進來即可
person.hpp:
1view code#pragma once
2 #include
3 #include4
using
namespace
std;
56 template
7class
person ;
1415 template
16 person::person(nametype name, agetype age)
1721
22 template
23void person::show()
24
main.cpp:
1 #include2view codeusing
namespace
std;
3 #include "
person.hpp"4
void
test()59
intmain()
10
執行結果:
總結:模板類不要分檔案編寫,寫到乙個類中即可
C 模板類的分檔案編寫問題及解決
pragma once include include using namespace std templateclass person include pch.h include person.h templateperson person t1 name t2 age templatevoid ...
類模板分檔案編寫
示例 person.hpp中 pragma once include using namespace std include templateclass person 建構函式 類外實現 templateperson person t1 name,t2 age 成員函式 類外實現 templatev...
C 類模板分檔案
問題 類模板的成員函式是在呼叫時才被建立,導致分檔案編寫時呼叫不到。解決 1.直接包含cpp檔案 2.將宣告和實現寫到同乙個檔案中,並更該字尾名為.hpp,hpp是約定的名字,並不是強制 標頭檔案 person.hpp include using namespace std template cla...