我正在尝试使用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”时:

#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&)[with T = int]”
  [-fpermissive] list.cpp:12:33:警告:将NULL传递给非指针
  “ ListNode :: ListNode(T,const ListNode&)的参数1 [T =
  int]’[-Wconversion-null] list.cpp:12:33:错误:递归求值
  ListNode :: ListNode(T,const ListNode&)的默认参数的形式
  [with T = int]’list.h:15:3:警告:传递的参数2
  ‘ListNode :: ListNode(T,const ListNode&)[with T = int]” [已启用
  默认情况下] list.h:在构造函数中'ListNode :: ListNode(T,const
  ListNode&)[with T = int]’:list.cpp:12:33:从实例化
  list.h:15:76:错误:无法将“ const ListNode”转换为
  初始化中的“ ListNode”

最佳答案

您的代码有很多错误:


在构造函数中,您有一个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);
}

关于c++ - 使用链接列表和模板的我的ctor有什么问题?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9470303/

10-12 20:41