C++ 我的ctor使用链表和模板有什么问题?
我正在尝试使用cpp进行一点练习,希望制作一个链表类,然后对其进行操作、反转、查找圆等。但我不明白我的ctor/ 我有一个主要问题:C++ 我的ctor使用链表和模板有什么问题?,c++,C++,我正在尝试使用cpp进行一点练习,希望制作一个链表类,然后对其进行操作、反转、查找圆等。但我不明白我的ctor/ 我有一个主要问题: #include "list.h" #include <iostream> using namespace std; int main () { int x = 10; ListNode<int> node4(); ListNode<int> node3(10 ,node4); } #包括“list.h”
#include "list.h"
#include <iostream>
using namespace std;
int main () {
int x = 10;
ListNode<int> node4();
ListNode<int> node3(10 ,node4);
}
#包括“list.h”
#包括
使用名称空间std;
int main(){
int x=10;
ListNode节点4();
ListNode节点3(10,节点4);
}
这是“list.h”:
\ifndef列表\u节点\u H
#定义列表节点
#包括
使用名称空间std;
模板
类ListNode{
ListNode*下一步;
T数据;
公众:
ListNode(T dat=0,const ListNode&nex=NULL):数据(dat),下一个(nex){};
};
#恩迪夫
我不明白为什么这行:listnodenode3(10,node4)代码>
犯了这个错误,有什么问题
list.cpp:在函数“int main()”中:list.cpp:12:33:错误:无效
从“ListNode()()”到“int”[-fpPermissive]的转换
list.h:15:3:错误:初始化的参数1
'ListNode::ListNode(T,const ListNode&)[带T=int]'
[-fppermissive]list.cpp:12:33:警告:将NULL传递给非指针
'ListNode::ListNode(T,const ListNode&)[带T]的参数1=
int]'[-Wconversion null]list.cpp:12:33:错误:递归求值
“ListNode::ListNode(T,const ListNode&)”的默认参数的
[with T=int]'list.h:15:3:警告:正在传递
'ListNode::ListNode(T,const ListNode&)[带T=int]'[已启用]
默认情况下]list.h:在构造函数的ListNode::ListNode(T,const)中
ListNode&[with T=int]':list.cpp:12:33:从中实例化
here list.h:15:76:错误:无法将“const ListNode”转换为
初始化中的“ListNode”
这里有几个问题
- 首先,构造函数不需要
ListNode()
simpleyListNode(…)
- 第二,不能将引用参数的defalut设置为null,如果nex可能为null,则它必须是指针
这里有几个问题
- 首先,构造函数不需要
ListNode()
simpleyListNode(…)
- 第二,不能将引用参数的defalut设置为null,如果nex可能为null,则它必须是指针
默认参数是邪恶的(IMO)
(只是一个想法)
创建不同的构造函数(一个没有参数,一个有参数,…)默认参数是邪恶的(IMO)
(只是一个想法)
创建不同的构造函数(一个没有参数,一个有参数,…)您的代码有很多错误:
- 在构造函数中,有一个
null
引用作为默认值,这是无效的(请参阅)
- 对于没有参数的构造函数,您需要省略
()
(您可以了解原因)
像这样的方法应该会奏效:
using namespace std;
template <class T>
class ListNode {
ListNode* next;
T data;
public:
ListNode<T>( T dat = 0 ,ListNode<T> * nex = NULL):data(dat),next(nex){};
};
int main(){
ListNode<int> node4;
ListNode<int> node3(10, &node4);
}
使用名称空间std;
模板
类ListNode{
ListNode*下一步;
T数据;
公众:
ListNode(T dat=0,ListNode*nex=NULL):数据(dat),下一个(nex){};
};
int main(){
ListNode节点4;
ListNode节点3(10和节点4);
}
您的代码有许多错误:
在构造函数中,有一个null
引用作为默认值,这是无效的(请参阅)
对于没有参数的构造函数,您需要省略()
(您可以了解原因)
像这样的方法应该会奏效:
using namespace std;
template <class T>
class ListNode {
ListNode* next;
T data;
public:
ListNode<T>( T dat = 0 ,ListNode<T> * nex = NULL):data(dat),next(nex){};
};
int main(){
ListNode<int> node4;
ListNode<int> node3(10, &node4);
}
使用名称空间std;
模板
类ListNode{
ListNode*下一步;
T数据;
公众:
ListNode(T dat=0,ListNode*nex=NULL):数据(dat),下一个(nex){};
};
int main(){
ListNode节点4;
ListNode节点3(10和节点4);
}
是的,您可以为引用参数设置一个默认值,但您是对的,他确实需要一个指针。对于引用,不需要null。在这种情况下,这是没有意义的。是的,引用参数可以有一个默认值,但你是对的,他确实需要一个指针。对于引用,不需要null。在这种情况下,这是没有意义的。另外,使用链表类来存储指向堆栈上对象的指针可能是一个糟糕的设计。@SethCarnegie:我完全同意你的观点。使用链表类来存储指向堆栈上对象的指针也可能是一个糟糕的设计。@SethCarnegie:我完全同意你的观点