定义使用模板的构造函数

时间:2015-01-06 20:53:08

标签: c++ templates

我正在尝试模板,并认为我会尝试使用它们制作链表。我有一个头文件和一个cpp文件。

标题文件:

#ifndef LINKED_LIST_H
#define LINKED_LIST_H

template <class T>
class Node {
    public:
        // Constructor and desconstructor
        Node<T>(T value);
        ~Node();

        // ---- Methods ----
        void add(T value);            // Add the value at the end of the list
        void add(T value, int index); //

        void remove(int index);  //
        void remove(T value); //

        bool     containts(T value); // Recursively check if our value it the supplied value
        Node<T>* at(int index);      // Return the Node at the given index

        int  size();  // Recursively get the size

        void print(); // Print the value and move to the next one

        Node* next;  // Next Node in the list
        T     value; // Value of the Node
};

template <class T>
class LinkedList {
    public:
        // Constructor and deconstructor
        LinkedList<T>();
        ~LinkedList<T>();

        // ---- Methods ----
        void add(T value);            // Add a new Node at the end of the list with value
        void add(T value, int index); // Add a new Node at the given index of the list with value

        void remove(int index); // Remove the Node at the given index
        void remove(T value);   // Remove any Nodes with the given value

        bool     contains(T value);     // If the List contains the supplied value
        Node<T>* operator[](int index); // Node at the specified index

        int  size();  // Returns the number of Nodes in the list
        bool empty(); // What do you think this does?

        void print(); // Prints all the values in the List

    private:
        Node<T>* head;   // The top of the List
        Node<T>* latest; // Latest Node added
};

#endif

在我的.cpp文件中,我尝试使用

定义Node的构造函数
#include "LinkedList.h"

template<class T> Node<T>::Node<T>(T value) {

}

然而,在编译时我收到此错误:

  

./ src / Util / LinkedList.cpp:3:19:错误:'Node :: Node'命名构造函数,而不是类型    模板Node :: Node(T value){                      ^   ./src/Util/LinkedList.cpp:3:19:错误:'Node'没有模板构造函数

我不应该定义这种类型吗?既然是模板呢?对不起,如果格式不正确,这是我第一次使用堆栈溢出。

1 个答案:

答案 0 :(得分:3)

您需要的正确语法是:

Node(T value); // not a template

template<class T> Node<T>::Node(T value) {

Node构造函数本身不是模板,它需要T - 这是类的模板类型。现在,如果您希望构造函数本身是模板化的,那将是:

template <typename U>
Node(U );

template <typename T>
template <typename U> // yep, twice
Node<T>::Node(U value)
{
    ..
}