C++ 使用其他模板创建模板
下面是模板列表代码的简化版本(改编自) 列表抱怨(编译错误)“节点不是类型”。为什么会这样,解决方法是什么 我尝试用“结构节点”替换“类节点”(以及相关的更改),结构版本运行良好。所以主要的问题似乎是:一个模板类如何访问另一个模板类C++ 使用其他模板创建模板,c++,templates,C++,Templates,下面是模板列表代码的简化版本(改编自) 列表抱怨(编译错误)“节点不是类型”。为什么会这样,解决方法是什么 我尝试用“结构节点”替换“类节点”(以及相关的更改),结构版本运行良好。所以主要的问题似乎是:一个模板类如何访问另一个模板类 #include <iostream> using namespace std; template <typename T> class Node { public: Node(){} Node(T
#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;
}
#包括
使用名称空间std;
模板
类节点
{
公众:
节点(){}
节点(T theData,Node*theLink):数据(theData),链接(theLink){}
Node*getLink()常量{return link;}
const T getData()const{return data;}
void setData(const T&theData){data=theData;}
void setLink(节点*指针){link=pointer;}
私人:
T数据;
节点*链接;
};
模板
班级名单{
公众:
列表(){
第一个=空;
last=NULL;
计数=0;
}
void insertFirst(常量T和新数据){
first=新节点(newData,first);
++计数;
}
作废打印列表(){
节点*诱惑;
诱惑=第一;
while(诱惑!=NULL){
cout getData()getLink();
}
}
~List(){}
私人:
节点*第一;
节点*最后;
整数计数;
};
int main(){
列表myIntList;
你用的是什么
new Node(newData, first);
在列表
模板中。此时,节点
不是指类型,而是指模板。当然,要使用new创建类型的实例,您需要一个类型
您最可能要做的事情是通过实例化模板使其成为一个类型,即
new Node<T>(newData, first);
新节点(首先是新数据);
“列表抱怨(编译错误)“节点不是类型”总是添加准确的错误和行。我还有一个与此代码相关的问题:在上面的代码中,节点类对其他类可见。如果我想将其嵌套在列表下,代码会是怎样的?我尝试将代码移入,但第一个抱怨是”非模板类型的节点用作模板。@Rog:您可能希望将此作为一个单独的SO问题提问,但作为一个快速提示:如果节点嵌套在列表中,那么就没有理由将节点作为模板。这就是我对struct版本所做的。谢谢您的提示。