我的ctor使用链表和模板有什么问题?

时间:2012-02-27 18:35:17

标签: c++

我正在尝试用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 '

3 个答案:

答案 0 :(得分:3)

您的代码有很多错误:

  1. 在您的构造函数中,您有null引用作为默认值,该引用无效(请参阅here)。

  2. 对于没有参数的构造函数,您需要省略()(您可以阅读为什么here

  3. 这样的事情应该有效:

    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)。

(只是一个想法) 创建不同的构造函数(一个没有参数,一个带参数,......)