Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 使用其他模板创建模板_C++_Templates - Fatal编程技术网

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版本所做的。谢谢您的提示。