Можно создать дубликат:
Why can templates only be implemented in the header file?Включить .cpp-файл?
Я пытался вокруг с C++ в последнее время. На данный момент я пытаюсь запрограммировать что-то, что я уверен, что когда-либо сделал это хотя бы один раз: простой класс LinkedList. Код выполнен, но я как-то не скомпилировал его. Я был googling, и кажется, что я неправильно привязываю объектные файлы. Это то, что мой код в основном выглядит следующим образом:
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
}
Тогда есть файл .cpp называется linkedlist.cpp, который содержит все фактический код из Класс LinkerList. При попытке компиляции test.cpp с помощью следующей команды:
g++ ..\src\test.cpp
Я получаю сказал, что есть неопределенная ссылка на «LinkedList :: LinkedList()». Так я думал, что это они связаны неправильно, поскольку есть более чем один .cpp файл, поэтому я попытался это так:
g++ -c -Wall -O2 ..\src\test.cpp
g++ -c -Wall -O2 ..\src\linkedlist.cpp
g++ -s test.o linkedlist.o
Однако это ничего не меняет. Сообщения об ошибках остаются неизменными. Я пытался найти какую-то информацию в Интернете, однако на самом деле это не получилось.
Хорошо сделано для формулировки этого полностью и согласованно. :) Редкий для новичков, в настоящее время :( –
Поскольку «LinkedList» является классом шаблона, пользователям этого класса необходимо полное определение всех методов. Один из способов сделать это - иметь все методы inline в классе, а другой - поместить методы в отдельный файл и включить их в заголовочный файл. –
@Mike: Трудно назвать это «дубликатом» как таковым. Здесь все становится нечетким - вопрос совершенно другой, даже если мы надеваем Не нужно снова покрывать ту же землю. :) –