我正在尝试用cpp练习一点,想要制作一个链表的类,而不是操纵它反转它,找到圆等等但我无法理解我的ctor / <的问题是什么/ p>
我有这个主要的:
#include "list.h"
#include <iostream>
using namespace std;
int main () {
int x = 10;
ListNode<int> node4();
ListNode<int> node3(10 ,node4);
}
虽然这是“list.h”:
#ifndef LIST_NODE_H
#define LIST_NODE_H
#include <iostream>
using namespace std;
template <class T>
class ListNode {
ListNode* next;
T data;
public:
ListNode<T>( T dat = 0 ,const ListNode<T> &nex = NULL):data(dat),next(nex){};
};
#endif
我无法理解为什么这一行:ListNode<int> node3(10 ,node4);
犯了这个错误,问题是什么?
list.cpp:在函数'int main()'中:list.cpp:12:33:错误:无效 从'ListNode()()'转换为'int'[-fpermissive] list.h:15:3:错误:初始化参数1 'ListNode :: ListNode(T,const ListNode&amp;)[with T = int]' [-fpermissive] list.cpp:12:33:警告:将NULL传递给非指针 'ListNode :: ListNode(T,const ListNode&amp;)的参数1 [与T = int]'[-Wconversion-null] list.cpp:12:33:错误:递归评估 'ListNode :: ListNode(T,const ListNode&amp;)的默认参数 [with T = int]'list.h:15:3:警告:传递参数2 'ListNode :: ListNode(T,const ListNode&amp;)[with T = int]'[enabled 默认情况下] list.h:在构造函数'ListNode :: ListNode(T,const ListNode&amp;)[with T = int]':list.cpp:12:33:从...实例化 这里list.h:15:76:错误:无法将'const ListNode'转换为 初始化中的'ListNode '
答案 0 :(得分:3)
您的代码有很多错误:
在您的构造函数中,您有null
引用作为默认值,该引用无效(请参阅here)。
对于没有参数的构造函数,您需要省略()
(您可以阅读为什么here)
这样的事情应该有效:
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);
}
答案 1 :(得分:2)
这里有几个问题。
首先,构造函数不需要ListNode<T>()
simpley ListNode(...)
。
其次,如果nex有可能为null,则无法将参考参数的defalut设为null。
答案 2 :(得分:0)
默认参数是邪恶的(IMO)。
(只是一个想法) 创建不同的构造函数(一个没有参数,一个带参数,......)