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

总是会出现/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;
}

c++

1个回答

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

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问

相似问题

6
SQL server如何实现以星期制和时间制的组合为插入条件,以实现将数据插入不同的字段中
8
在VS2010里的asp.net中添加了一个button按钮如何实现点击这个按钮执行SQL语句
4
关于SQL server 2008时间差datediff函数计算问题
3
SQL server 2008如何在datediff函数增加一个计算条件
8
window.dataLayer = window.dataLayer || [];什么意思?
1
logback 打印出来的日志上传ftp显示程序被占用(贴的代码不重要,和网上代码是一样的)
3
大佬们关于tp5模型的数据库更新问题看看这段代码哪错了
1
新手写的python代码段,求大佬帮忙看看
2
关于网上很多IOCP服务器实例的一段代码,不知道写的是什么意思,希望大佬们指点迷津!
3
这两段简单的错误代码该如何修改...
2
C++代码,求大佬解答如何优化这段代码增加运行速度
2
一个有关于C宏命令中 ##__VA_ARGS__ 的使用问题
1
初学者c语言问题,恳请各位大佬帮忙,万分感谢!
1
.read()方法返回的是读取的内容吧,那么这段代码的倒数第二行第三行怎么解释呢?求各位大佬教导
1
写北大oj1003时的疑惑,求各位路过的大佬帮帮忙
1
关于java中random.nextInt()的问题
0
python3多进程爬虫的每个进程停止运行但是程序没有退出?
1
cocos creator 销毁节点,和延时错误
1
Visual studio 2017 不知道为什么C++编译任意一段代码都调试不了,出现一个弹窗不知道啥原因。
3
python3.7)print为什么不能打印出内容?