thể trùng lặp:
Why can templates only be implemented in the header file?Bao gồm tệp .cpp?
Tôi đã cố gắng xung quanh với C++ thời gian gần đây. Hiện tại tôi đang cố gắng lập trình một cái gì đó mà tôi chắc chắn đã từng thực hiện ít nhất một lần: Một lớp LinkedList đơn giản. Mã được thực hiện, nhưng tôi bằng cách nào đó không biên dịch được. Tôi đã googling và có vẻ như tôi đang liên kết các tập tin đối tượng sai. Đó là những gì mã của tôi về cơ bản trông giống như:
test.cpp
#include "linkedlist.h"
int main()
{
LinkedList<int> list;
// do something
}
linkedlist.h
template <typename T>
class LinkedList
{
// a lot of function and variable definitions
}
Sau đó có một file cpp gọi linkedlist.cpp chứa tất cả các mã thực tế của Lớp LinkerList. Khi cố gắng biên dịch test.cpp bằng cách sử dụng lệnh sau:
g++ ..\src\test.cpp
Tôi được thông báo rằng có một tham chiếu không xác định đối với 'LinkedList :: LinkedList()'. Vì vậy, tôi đã nghĩ rằng nó được liên kết sai vì có nhiều hơn một tập tin .cpp, vì vậy tôi đã thử nó như thế này:
g++ -c -Wall -O2 ..\src\test.cpp
g++ -c -Wall -O2 ..\src\linkedlist.cpp
g++ -s test.o linkedlist.o
Tuy nhiên, điều này không thay đổi bất cứ điều gì. Các thông báo lỗi vẫn giữ nguyên. Tôi đã cố gắng tìm một số thông tin trên internet, tuy nhiên, nó đã không thực sự làm việc ra ngoài.
Thực hiện tốt để xây dựng điều này hoàn toàn và mạch lạc. :) Hiếm đối với người mới, ngày nay: ( –
Vì 'LinkedList' là một lớp mẫu, người dùng của lớp đó cần định nghĩa đầy đủ của tất cả các phương thức. Một cách làm là có tất cả các phương thức nội tuyến trong lớp, trong khi một phương thức khác là Để đưa các phương thức vào một tập tin riêng biệt và đưa chúng vào trong tập tin tiêu đề –
@Mike: Thật khó để gọi đó là một "trùng lặp" cho mỗi se.Đây là nơi mọi thứ trở nên mờ - câu hỏi hoàn toàn khác, mặc dù chúng ta không 't cần phải che phủ cùng một mặt đất một lần nữa. :) –