m714星云 2019-03-18 01:00 采纳率: 0%
浏览 447

能有大佬帮我看一下这段代码问题在哪吗

总是会出现/clang:-1: linker command failed with exit code 1 (use -v to see invocation)

#include <iostream>
using namespace std;
template <class T>
struct DblNode{//链表结点类定义
    T data;//链表结点数据
    DblNode<T> *lLink,*rLink;//链表前驱后继指针
    DblNode(DblNode<T> *left=NULL,DblNode<T> *right=NULL){
        lLink=left;
        rLink=right;
    }//构造函数赋予初值,适用于后面调用时候实参两个
    DblNode(T value,DblNode<T> *left=NULL,DblNode<T> *right=NULL){
        data=value;
        lLink=left;
        rLink=right;
    }//构造函数赋予初值,适用于后面调用时候实参两个
};
/*
template <class T>
class LinearList {
public:
    LinearList();//定义构造函数(在这里可有可无)
    ~LinearList();//定义析构函数(清理垃圾)
    //virtual提供子类继承并将其实现。
    virtual DblNode<T>Search(const T&x)const=0;//const表明它不能改变操作它的对象的数据成员,且自身不能调用非const成员
    virtual DblNode<T>Locate(int i,int d)const=0;//在表中定位第i个元素的位置
    virtual bool Insert(int i,const T&x,int d)=0;//在第i个表项后插入x
    virtual bool Remove(int i,T&x,int d)=0;//删除第i个表项,通过x返回

};
 */
//
template <class T>
class DblList{//继承的关系
public:
    DblList();//构造函数,建立附加头结点
    DblList(T data);
    ~DblList();//析构函数,清理垃圾
    void setHead(DblNode<T> *ptr){first=ptr;}
    DblNode<T>*Search(const T&x);//在链表中按后继方向寻找等于给定植x的结点
    bool Insert(int i,const T&x,int d);//在链表中第i个结点插入一个包含x的新结点,d=0按前驱方向,d!=0按后继方向
    bool Remove(int i,T&x,int d);//在链表中删除第i个结点,x为返回值,d=0按前驱方向,d!=0按后继方向
    DblNode<T>*Locate(int i,int d);//在链表中定位序号为i的结点,d=0按前驱方向,d!=0按后继方向
private:
    DblNode<T> *first;//定义first
};
//
template <class T>
DblList<T>::DblList(T uniqueVal){
    first=new DblNode<T>[uniqueVal];
    if(first==NULL){
        cerr<<"存储分配错误"<<endl;
        exit(1);
    }
    first->rLink=first->lLink=first;
}
//
//
template <class T>
DblNode<T> *DblList<T>::Search(const T&x){
    DblNode<T>*current=first->rLink;//定义一个当前指针类结点,并指向下一个结点。
    while(current !=first&&current->data!=x){
        current=current->rLink;//如果当前结点不是第一个且当前结点指向的数据不是x,current就指向下一个。
    }//如果没找到,current最终会通过附加头结点指向first并退出当前的循环
    if(current!=first)//找到了,说明current并没有回到first
        return current;
    else
        return NULL;
};
//
//
template<class T>
DblNode<T>*DblList<T>::Locate(int i,int d){
    if(first->rLink==first||i==0)//表头结点其实就是第0个结点,当i等于0时返回first即可
        return first;
    DblNode<T> *current;
    if(d==0)
        current=first->lLink;//d=0时往前驱方向走
    else
        current=first->rLink;
    for(int j=1;j<i;j++){
        if (current==first)
            break;//在有些数据下,i的数值可能会大于链表的长度,这时我们需要退出。
        else if(d==0)
            current=current->lLink;//往前驱方向走
        else
            current=current->rLink;//往后继方向走
    }
    if(current!=first)
        return current;
    else
        return NULL;
}
//
//
template <class T>
bool DblList<T>::Insert(int i, const T&x, int d){
    DblNode<T>*current=Locate(i,d);//首先我们需要查找第i个结点
    if(current==NULL)
        return false;//输入的i值不合理,不可能插入
    DblNode<T>*newNode=new DblNode<T>(x);//定义一个新的结点指针,并将x存储在newNode里面。
    if(newNode==NULL){
        cerr<<"存储分配失败"<<endl;
        exit(1);//程序异常,强行退出程序
    }
    if(d==0){//前驱方向上插入
        newNode->lLink=current->lLink;
        current->lLink=newNode;
        newNode->lLink->rLink=newNode;
        newNode->rLink=current;
    }
    else{
        newNode->rLink=current->rLink;
        current->rLink=newNode;
        newNode->rLink->lLink=newNode;
        newNode->lLink=current;
    }
    return true;
};
//
//
template <class T>
bool DblList<T>::Remove(int i,T&x,int d) {
    DblNode<T>*current=Locate(i,d);//定位第i个结点
    if(current==NULL)
        return false;//输入的i值不合理,不可能删除
    current->rLink->lLink=current->lLink;//从lLink中摘下
    current->lLink->rLink=current->rLink;//从rLink中摘下
    x=current->data;//删除的值赋值给x
    delete current;//删除
    return true;
};
//
template <class T>
void xunhuan(DblList<T>& x,int n,int m){
    DblNode<T> *p=x.Locate(1,0),*pre=NULL;
    for (int i=0;i<n-1;i++)
        for(int j=1;j<m;j++){
            pre=p;
            p=p->rLink;
        }
}
int main(){
    int n;
    cin>>n;
    DblList<int> x;
    for(int i=0;i<n;i++)
        for(int j=0;j<2*n;i++)
            x.Insert(i,j,0);
    return 0;
}

  • 写回答

1条回答 默认 最新

  • lxf2580 2019-03-18 15:26
    关注

    调试环境:VC++6.0。
    发现问题:
    1.DblList的构造函数DblList()和析构函数需要添加实现代码。(为什么会报错我说不出来)
    2.main函数最后一句代码“return 0;”中,分号是中文分号,需要改为英文分号
    3.main函数的“for(int j=0;j<2*n;i++)”中,i++是否应该改为j++?
    这三个地方修改后,代码就可以正常运行了。

    评论

报告相同问题?

悬赏问题

  • ¥15 求差集那个函数有问题,有无佬可以解决
  • ¥15 【提问】基于Invest的水源涵养
  • ¥20 微信网友居然可以通过vx号找到我绑的手机号
  • ¥15 寻一个支付宝扫码远程授权登录的软件助手app
  • ¥15 解riccati方程组
  • ¥15 display:none;样式在嵌套结构中的已设置了display样式的元素上不起作用?
  • ¥15 使用rabbitMQ 消息队列作为url源进行多线程爬取时,总有几个url没有处理的问题。
  • ¥15 Ubuntu在安装序列比对软件STAR时出现报错如何解决
  • ¥50 树莓派安卓APK系统签名
  • ¥65 汇编语言除法溢出问题