我正在尝试模板,并认为我会尝试使用它们制作链表。我有一个头文件和一个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'没有模板构造函数
我不应该定义这种类型吗?既然是模板呢?对不起,如果格式不正确,这是我第一次使用堆栈溢出。
答案 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)
{
..
}