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++;模板类成员函数,依赖于其他模板类_C++_Templates - Fatal编程技术网

C++ c++;模板类成员函数,依赖于其他模板类

C++ c++;模板类成员函数,依赖于其他模板类,c++,templates,C++,Templates,我试图创建一个链表类,该类使用一个节点类作为列表中的节点(下一个节点,数据)。链表类充当包含成员函数的列表的标题,可以与任何数据类型(即模板)一起使用。我很难理解模板在类声明和成员函数实现中是如何工作的 我有两个链接列表模板类(以下是相关部分): 模板 类ListNode { 公众: 节点对象类型数据; ListNode*下一步; ListNode():下一个(NULL){} ListNode(const NodeObjectType&item,ListNode*nextNode=NULL) {

我试图创建一个链表类,该类使用一个节点类作为列表中的节点(下一个节点,数据)。链表类充当包含成员函数的列表的标题,可以与任何数据类型(即模板)一起使用。我很难理解模板在类声明和成员函数实现中是如何工作的

我有两个链接列表模板类(以下是相关部分):

模板
类ListNode
{
公众:
节点对象类型数据;
ListNode*下一步;
ListNode():下一个(NULL){}
ListNode(const NodeObjectType&item,ListNode*nextNode=NULL)
{
数据=项目;
next=nextNode;
}
};
样板
类myList
{
公众:
myList()
{
Head=NULL;
}
//其他成员功能。。。
布尔包含(对象类型x)
{
ListNode*当前=头部;
while(当前!=NULL)
{
如果(当前->数据==x)
返回true;
当前=当前->下一步;//前进一步
}
返回false;
}
无效添加(ObjectType x)
{
如果(!包含(x))
{
ListNode*NewListNode(x,头);
Head=NewListNode;
}
}
私人:
ListNode*头;
};
在编译时,我得到了错误

In instantiation of 'void myList<ObjectType>::add(ObjectType) [with ObjectType = int]':
required from here
error: expression list treated as compound expression in initializer [-fpermissive]
在“void myList::add(ObjectType)[with ObjectType=int]的实例化中:
从这里开始需要
错误:表达式列表在初始值设定项[-fppermissive]中被视为复合表达式
我是在错误地传递模板对象类型,还是其他原因?谢谢你

这句话:

ListNode<ObjectType>* NewListNode(x , Head);
ListNode*NewListNode(x,头);
应该是:

ListNode<ObjectType>* NewListNode = new ListNode<ObjectType>(x , Head);
//                                ~~~~~~~~~~~~~~~~~~~~~~~~~^  
ListNode*NewListNode=NewListNode(x,Head);
//                                ~~~~~~~~~~~~~~~~~~~~~~~~~^  

这与模板无关<代码>tx(a,b)在堆栈上生成一个
T
,并将
a
b
传递给构造函数<代码>T*px=新的T(a,b)在堆上生成一个
T
,将
a
b
传递给构造函数<代码>T*px(a,b)是一个弗兰肯斯坦式的混乱,这是一个语法错误。啊,我现在看到了,谢谢。
ListNode<ObjectType>* NewListNode = new ListNode<ObjectType>(x , Head);
//                                ~~~~~~~~~~~~~~~~~~~~~~~~~^