Biên dịch template class khi chia ra nhiều file

Em có code 1 lớp Stack ở dạng template class của C++
Khi để chung trong 1 file .cpp thì biên dịch OK

Sau đó em chia code ra file Stack.hpp, Stack.cpp, và main.cpp
Khi biên dịch làm lần lượt chạy các lệnh như sau :

g++ -c main.cpp
g++ -c Stack.cpp
g++ -o test main.o Stack.o

Và compiler báo lỗi

C:\Users\DRAGON~1\AppData\Local\Temp\ccijtZvF.o:main.cpp:(.text+0xbb): undefined reference to `Stack<int>::Stack()'
collect2.exe: error: ld returned 1 exit status

Em nghĩ rằng lỗi do khi em g++ -c Stack.cpp chương trình chưa biết đây là Stack<int> hay Stack<float>… nên khi biên dịch thì báo undefined reference to `Stack<int>::Stack()'

Em học C++ xưa giờ chỉ code duy nhất trong 1 file
Nay thử mò chia ra các file thì lỗi tè le :cry: :cry: :cry:
Mong các bác chỉ giáo.

Bổ sung : https://stackoverflow.com/questions/44774036/why-use-a-tpp-file-when-implementing-templated-functions-and-classes-defined-i

template trong C++ ko có bỏ vào cpp được. Nó ko phải là code, nó là hướng dẫn cho compiler tạo ra code :V nên phải bỏ vào chung 1 file header thôi. Nếu muốn tách ra thì tách thành 2 phần: .h và .tpp hoặc .impl chẳng hạn, rồi trong .h thêm dòng #include "mytemplate.tpp" hoặc #include "mytemplate-impl.h" sau cùng

2 Likes

Vả lại C/C++ pre-processing là copy-paste :smiley: chứ không thông minh như from math import sqrt :smiley:

2 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?