今天將模板類函式分成了宣告和定義兩個檔案:
模板類的宣告:
#pragma once
#ifndef find_item
#define find_tiem
template const elemtype* find_item(const elemtype* first,
const elemtype* last, const elemtype& value);
void print_hello();
#endif
模板類的定義
#include "iostream"
void print_hello()
main函式:
#include #include #include "find.hh"
using namespace std;
int main()
; vectorvec_a(a, a + 7);
const int* vec_index;
vec_index = find_item(a,a+7, a[4]);
print_hello();
std::cout << "hello world!\n"<<(vec_index - a);
}
單獨編譯定義的檔案是可以通過的,但是整體編譯在一起就死活不行了。
定位問題是,模板類只能是現在標頭檔案中,是因為編譯順序決定的。
如果是普通型別函式的宣告,在main中使用的時候,是需要留出函式的介面,在鏈結時鏈結就好了。
但是模板類,如果在鏈結的時候鏈結,會發現,main函式裡所使用的的函式是具體的型別,但是模板定義的裡面是template,鏈不上。所以應當將模板類的定義放到標頭檔案中,編譯器開始編譯的時候就已經知道了函式的模板,在編譯各個應用了模板函式的時候,直接替換掉就好了。
C 模板類 函式,將標頭檔案與原始檔分離
關鍵在於模板顯式例項化。按一般方式編寫.h和.cpp檔案,但注意新增template的宣告 在.cpp檔案末尾,新增模板顯式例項化 如 顯式例項化,注意,template 之後沒有 若新增則會報錯!每種將被使用的型別,均需要進行顯式例項化 template void a show int templ...
C 標頭檔案與C標頭檔案
include 設定插入點 include 字元處理 include 定義錯誤碼 include 浮點數處理 include 檔案輸入 輸出 include 引數化輸入 輸出 include 資料流輸入 輸出 include 定義各種資料型別最值常量 include 定義本地化函式 include ...
C 標頭檔案與類的宣告
complex.h 1 防衛式宣告 ifndef complex 告訴編譯器曾經沒有 define complex endif 作用 發展乙個複數,把它放在標頭檔案中,因為很多程式要用到這個標頭檔案,include complex 當第一次include這個標頭檔案後,編譯器就會進入標頭檔案中,並且...