开发者社区> 问答> 正文

c++链表错误,implicitly-deleted?报错

报错信息:



LinkList.h:

#include <stdio.h>

template <typename T>
struct Node{
    T t;
    struct Node<T> *next;
};
template <typename T>
class LinkList {
public:
    LinkList(void);//构造函数
    ~LinkList(void);//析构函数
    LinkList(const LinkList &linkList);//拷贝函数
public:
    //业务方法
    int add(T t,int pos);//添加数据
    T& get(int pos);//获取数据
private:
    int length;//链表长度
    Node<T> *header;//业务节点
    
};




LinkList.cpp:

#include "LinkList.h"


template <typename T>
LinkList<T>::LinkList(void)//构造函数
{
    header = new Node<T>;
    header->next = NULL;
    length = 0;
}
template <typename T>
LinkList<T>::~LinkList(void)//析构函数
{
    Node<T> *tmp = NULL;
    if(header == NULL){
        return;
    }
    while (header) {
        tmp = header->next;
        delete header;
        header = tmp;
    }
    
    header = NULL;
    length = 0;
}
template <typename T>
LinkList<T>::LinkList(const LinkList &linkList)//拷贝函数
{
    //不写咯
}
////业务方法
template <typename T>
int LinkList<T>::add(T t,int pos)//添加数据
{
    int ret = 0;
    Node<T> *current = NULL;
    current = &(LinkList<T>::header);//默认指向头部第一个节点(实际上这个节点用不到咯)
    
    for (int i = 0; i < pos && (current->next != NULL); i ++) {
        current = current->next;
    }
    Node<T> *newNode;
    newNode->t = t;
    newNode->next = current->next;
    current->next = newNode;
    return ret;
}

template <typename T>
T& LinkList<T>::get(int pos)//获取数据
{
    Node<T> *current = NULL;
    current = &(LinkList<T>::header);//默认指向头部第一个节点(实际上这个节点用不到咯)
    for (int i = 0; i < pos && (current->next != NULL); i ++) {
        current = current->next;
    }
    return current->next;
}



main.cpp:

#include <iostream>
#include <string>
#include "LinkList.cpp"


using namespace std;

class Teacher{

public:
    Teacher(int age,string name){
        this->age = age;
        this->name = name;
    }
    
    void printTeacher(){
        cout << " 年龄: " << age << "  姓名: "  << name << endl;
    }
    
private:
    int age;//年龄
    string name;//姓名
};

int main(int argc, const char * argv[]) {
   
    Teacher t1(24,"zs");
    
    LinkList<Teacher> list;
    
    
//    list.add(t1, 0);
//    
//    Teacher t2 = list.get(0);
//    
//    t2.printTeacher();
    
    return 0;
}





我的编译器是xcode 7.0.1

请大家帮我看看,这是什么原因,万分感谢!

展开
收起
爱吃鱼的程序员 2020-06-12 10:51:31 807 0
1 条回答
写回答
取消 提交回答
  • https://developer.aliyun.com/profile/5yerqm5bn5yqg?spm=a2c6h.12873639.0.0.6eae304abcjaIB

    Teacher类本身没有默认的构造函数,因此Node里面的Tt没法默认构造。

    话说你用的啥IDE?

    IDE是xcode已经解决,是因为Teacher没有提供默认的构造函数。这明显是xcode应该是编译器使用的C++14标准,你的Node没有声明生成默认构造函数,使用:Node()=default;来声明默认构造函数,还有你的Teacher也没有默认的构造函数。
    2020-06-12 10:51:50
    赞同 展开评论 打赏
问答分类:
问答标签:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
使用C++11开发PHP7扩展 立即下载
GPON Class C++ SFP O;T Transce 立即下载
GPON Class C++ SFP OLT Transce 立即下载