30/09/2018, 17:05
LNK2019 :: Linker Error LNK2019 khi sử dụng template
Mình có làm một chương trình đơn giản sử dụng template như sau.
demo.h
#pragma once
#define normalize template <class T>
#include <iostream>
using namespace std;
normalize struct Stack_Array
{
T *s; // dùng mảng động quản lý tốt bộ nhớ hơn
int nItem; // số lượng phần tử có trong ngăn xếp
};
// hàm khởi tạo ngăn xếp rỗng
normalize void Init(Stack_Array<T>& stack);
demo.cpp
#include "demo.h"
// hàm khởi tạo ngăn xếp rỗng
normalize void Init(Stack_Array<T>& stack)
{
stack.nItem = 0;
stack.s = NULL;
}
main.cpp
#include <iostream>
#include "demo.h"
using namespace std;
int main()
{
Stack_Array<int> stack;
Init(stack);
cin.get();
return 0;
}
Nhưng khi build thì lại bị lỗi này
Error 1 error LNK2019: unresolved external symbol “void __cdecl Init(struct Stack_Array &)” (??$Init@H@@YAXAAU?$Stack_Array@H@@@Z) referenced in function _main
Bổ sung
Khi để tất cả vào một file main.cpp thì build bình thường không có lỗi nào khác
Bài liên quan
Bạn không thể implement template ở file
.cpp
được. Bạn phải mang nó vào file.h
. Đây là một yêu cầu khá đặc biệt dành cho template.Bạn đem cái
define
của hàmInit
sang filedemo.h
là ổn.Cám ơn anh @ltd. Em hiểu rồi. Loay hoay với mấy cái linker này hoài