使用模板时如何创建“新”节点

时间:2019-10-17 14:51:57

标签: c++ templates nodes

当我从以下代码行中收到错误消息时,创建这个新节点时我做错了什么:

 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文件中的以下代码行

0 个答案:

没有答案