gpt4 book ai didi

c++ - 使用另一个模板的模板

转载 作者:搜寻专家 更新时间:2023-10-31 01:48:40 25 4
gpt4 key购买 nike

这是模板列表代码的简化版本(改编自 http://www.daniweb.com/software-development/cpp/threads/237391/c-template-linked-list-help )

List 提示(编译错误)“节点不是类型”。这是为什么,解决方法是什么?

我尝试用“结构节点”(和相关更改)替换“类节点”,结构版本工作正常。所以主要问题似乎是:一个模板类如何访问另一个模板类?

#include <iostream>
using namespace std;

template <typename T>
class Node
{
public:
Node(){}
Node(T theData, Node<T>* theLink) : data(theData), link(theLink){}
Node<T>* getLink( ) const { return link; }
const T getData( ) const { return data; }
void setData(const T& theData) { data = theData; }
void setLink(Node<T>* pointer) { link = pointer; }
private:
T data;
Node<T> *link;
};

template <typename T>
class List {
public:
List() {
first = NULL;
last = NULL;
count = 0;
}
void insertFirst(const T& newData) {
first = new Node(newData, first);
++count;
}
void printList() {
Node<T> *tempt;
tempt = first;
while(tempt != NULL){
cout << tempt->getData() << " ";
tempt = tempt->getLink();
}
}
~List() { }

private:
Node<T> *first;
Node<T> *last;
int count;
};

int main() {
List<int> myIntList;
cout << "Inserting 1 in the list...\n";
myIntList.insertFirst(1);
myIntList.printList();
cout << endl;
List<double> myDoubleList;
cout << "Inserting 1.5 in the list...\n";
myDoubleList.insertFirst(1.5);
myDoubleList.printList();
cout << endl;
}

最佳答案

你正在使用

new Node(newData, first); 

List 模板中。此时,Node 不是指类型,而是指模板。但是当然要用 new 创建一个类型的实例,你需要一个类型。

您最有可能要做的是通过实例化模板使其成为一个类型,即

new Node<T>(newData, first);

关于c++ - 使用另一个模板的模板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17465576/

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