gpt4 book ai didi

c++ - 定义使用模板的构造函数

转载 作者:行者123 更新时间:2023-11-28 00:20:19 24 4
gpt4 key购买 nike

我正在尝试使用模板,并认为我会尝试使用它们制作一个链表。我有一个头文件和一个 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 文件中,我尝试使用

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

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

}

但是,在编译时我得到这个错误:

./src/Util/LinkedList.cpp:3:19: error: 'Node::Node' names the constructor, not the type template Node::Node(T value) { ^ ./src/Util/LinkedList.cpp:3:19: error: and 'Node' has no template constructors

我不应该定义类型吗?因为它是一个模板?抱歉,如果格式不正确,这是我第一次使用堆栈溢出。

最佳答案

您想要的正确语法是:

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)
{
..
}

关于c++ - 定义使用模板的构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27806989/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com