Duplicar posible:
Why can templates only be implemented in the header file?Incluye el archivo .cpp?
he estado tratando un poco con C++ recientemente. Por el momento estoy tratando de programar algo que estoy seguro que todos han hecho al menos una vez: una clase LinkedList simple. El código está hecho, pero de alguna manera no puedo compilarlo. He estado buscando en Google y parece que estoy vinculando los archivos del objeto incorrectamente. Eso es lo que mi código básicamente se parece a:
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
}
Luego hay un archivo .cpp denominado linkedlist.cpp que contiene todo el código real de la Clase LinkerList Cuando intente compilar test.cpp con el siguiente comando:
g++ ..\src\test.cpp
Me estoy dijeron que hay una referencia indefinida a ':: LinkedList LinkedList()'. Así que he estado pensando que está siendo vinculado mal ya que hay más de un archivo .cpp, así que lo probamos así:
g++ -c -Wall -O2 ..\src\test.cpp
g++ -c -Wall -O2 ..\src\linkedlist.cpp
g++ -s test.o linkedlist.o
Sin embargo, esto no cambia nada. Los mensajes de error permanecen igual. He estado tratando de encontrar información en internet, sin embargo, realmente no funcionó.
Bien hecho para formular esto de manera completa y coherente. :) Rara vez para un principiante, hoy en día :( –
Dado que 'LinkedList' es una clase de plantilla, los usuarios de esa clase necesitan la definición completa de todos los métodos. Una forma de hacerlo es tener todos los métodos en línea en la clase, mientras que otra es para poner los métodos en un archivo separado e incluirlos en el archivo de encabezado. –
@Mike: Es difícil llamar a eso un "duplicado" per se. Aquí es donde las cosas se ponen borrosas: la pregunta es completamente diferente, aunque no nos pongamos no es necesario cubrir el mismo terreno otra vez :) :) –