Referencia indefinida a miembros de la plantilla
Soy nuevo en C ++ y estoy preparando una tarea usando NetBeans IDE en Ubuntu 10.04. Yo uso g ++ como un compilador de C ++.
El mensaje de error:
build/Debug/GNU-Linux-x86/Maze.o: In function `Maze':
Maze/Maze.cpp:14: undefined reference to `Stack<Coordinate>::Stack()'
Maze/Maze.cpp:14: undefined reference to `Stack<Coordinate>::Stack()'
Maze/Maze.cpp:69: undefined reference to `Stack<Coordinate>::push(Coordinate)'
Maze/Maze.cpp:79: undefined reference to `Stack<Coordinate>::isEmpty()'
Maze/Maze.cpp:87: undefined reference to `Stack<Coordinate>::destroy()'
Y mi código relacionado:
Laberinto.h#include "Coordinate.h"
#include "Stack.h"
....
....
/**
* Contains the stack object
*
* @var Stack stack
* @access private
*/
Stack<Coordinate> *stack;
...
...
Maze.cpp#include "Maze.h"
...
...
Maze::Maze()
{
// IT SHOWS THAT THE FOLLOWING LINE HAS AN ERROR///
stack = new Stack<Coordinate>;
///////////////////////////////////////////////////
for( int y=0; y<8; y++ )
{
for( int x=0; x<8; x++ )
{
maze[y][x] = '0';
}
}
}
...
...
Y de acuerdo con la salida de error, cada línea que uséapilar la variable tiene un error: referencia indefinida.
Stack.cpp#include "Stack.h"
...
...
template <class T> Stack<T>::Stack()
{
// Create the stac!
create();
}
...
Lo busqué en Google, pero no pude resolver el problema. Creo que hay algo mal con mi orden de inclusión, o tal vez usé los punteros de manera incorrecta.
También intenté crear un archivo MAKE por mí mismo, pero el resultado no cambió. He preparado este archivo MAKE de acuerdo con este enlace:http://www.cs.umd.edu/class/spring2002/cmsc214/Tutorial/makefile.html
Aquí está mi archivo MAKE:
maze: Maze.o Stack.o Coordinate.o
g++ -Wall Maze.o Stack.o Coordinate.o -o maze
Maze.o: Maze.cpp Maze.h Stack.h Coordinate.h
g++ -Wall -c Maze.cpp
Stack.o: Stack.cpp Stack.h
g++ -Wall -c Stack.cpp
Coordinate.o: Coordinate.cpp Coordinate.h
g++ -Wall -c Coordinate.cpp
Maze.h: Stack.h Coordinate.h
¿Cómo podría superar este error? ¿Algunas ideas?