当我从以下代码行中收到错误消息时,创建这个新节点时我做错了什么:
Node<string>* myNode = new Node<string>( );
错误消息:
TestNode.o:TestNode.cpp:(.text+0x20): undefined reference to `Node<std::string>::Node()'
Node.h
#ifndef BUILT_NODE
#define BUILT_NODE
#include <string>
template <typename T>
class Node
{
public:
Node(); // constructor
Node(const T& i, Node<T>* init_next, Node<T>* init_prev);
~Node(); //deconstructor
//pointer getters and setters (for next and prev nodes)
void set_next(Node<T>* next_link);
void set_prev(Node<T>* prev_link);
Node<T>* get_next();
const Node<T>* get_next() const;
Node<T>* get_prev();
const Node<T>* get_prev() const;
// data getters and setters (for the current data item)
void set_data(const T& new_data);
T get_data() const;
//private members here
private:
Node<T>* next; //pointer to next (or NULL)
Node<T>* prev; //poiner to prev (or NULL)
T data; //pointer to payload
};
#endif
Node.cpp
#include "Node.h"
template <typename T>
Node<T>::Node(const T& i, Node<T>* init_next, Node<T>* init_prev)
{
data = i;
next = init_next;
prev = init_prev;
}
template <typename T>
Node<T>::Node()
{
next = NULL;
prev = NULL;
}
template <typename T>
Node<T>::~Node()
{
}
template <typename T>
void Node<T>::set_data(const T& new_data) //do we need <T> here?
{
data = new_data;
}
template <typename T>
T Node<T>::get_data() const //do we need here?
{
return data;
}
template <typename T>
void Node<T>::set_next(Node<T>* next_link)
{
next = next_link;
}
template <typename T>
Node<T>* Node<T>::get_next()
{
return next;
}
template <typename T>
const Node<T>* Node<T>::get_next() const
{
return next;
}
template <typename T>
void Node<T>::set_prev(Node<T>* prev_link)
{
prev = prev_link;
}
template <typename T>
Node<T>* Node<T>::get_prev()
{
return prev;
}
template <typename T>
const Node<T>* Node<T>::get_prev() const
{
return prev;
}
TestNode.cpp
#include <iostream>
#include <cstdlib>
#include "Node.h"
using namespace std;
int main()
{
Node<string>* myNode = new Node<string>( );
myNode->set_data (" TestString " );
cout << "Node Data : " << myNode->get_data() << endl << endl;
cout << "-------------------------" << endl << endl;
}
错误消息将我指向TestNode.cpp文件中的以下代码行