C 模板類與標頭檔案

2021-09-25 20:58:18 字數 961 閱讀 7924

今天將模板類函式分成了宣告和定義兩個檔案:

模板類的宣告:

#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這個標頭檔案後,編譯器就會進入標頭檔案中,並且...