首页 > c++无法解析的外部符号该符号在函数 _wmain 中被引用

c++无法解析的外部符号该符号在函数 _wmain 中被引用

刚刚开始学c++学写链表。。学校用的vs2008不太会用,报错看不懂,查了百度说要加什么库,但是好像也没用什么库。。还望指教= =十分感谢

//main.cpp

    // linklist.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include "declar.h"
#include<iostream>
using namespace std;

int _tmain(int argc, _TCHAR* argv[])
{
    ElemType la[20],lb[20],n;
    int i;
    LinkList LA=NULL,LB=NULL;

    InputList_L(la);
    InputList_L(lb);
    InitList_L(LA,la);
    InitList_L(LB,lb);
    ListTraver_L(LA);
    ListTraver_L(LB);

    cout<<"Insert(LA):   "<<"Position:   "<<endl;
    cin>>n>>i;
    ListInsert_L(LA,i+1,n);
    ListTraver_L(LA);

    cout<<"Delete position(LB):";
    cin>>i;
    ListDelete_L(LB,i,n);
    ListTraver_L(LB);
    cout<<"Delete data:"<<n<<endl;

    cout<<"Find data(LA):";
    cin>>n;
    i=FindData_L(LA,n);
    cout<<"Position:"<<i<<endl;

    cout<<"Merge LA and LB"<<endl;
    MergeList_L(LA,LB);
    ListTraver_L(LA);

    return 0;
}

//declar.h

#define OK 1
#define ERROR 0

typedef int Status;
typedef int ElemType;
typedef struct LNode{
    ElemType data;
    LNode *next;
}LNode,*LinkList;


Status InitList_L(LinkList,ElemType *);//创建带头节点的单链表
Status ListInsert_L(LinkList,int,ElemType);//在链表元素i前插入元素e
Status ListDelete_L(LinkList,int,ElemType);//删除第i个节点,用e带回
ElemType FindData_L(LinkList,ElemType);//查找元素n
void MergeList_L(LinkList,LinkList);//合并两个链表
void ListTraver_L(LinkList);//打印链表元素
void InputList_L(ElemType *);//输入数据

//fun.cpp

#include "stdafx.h"
#include<iostream>
#include"declar.h"
using namespace std;

Status InitList_L(LinkList &L,ElemType *ptr)//创建一个带头节点的单链表
{
    L=new LNode;
    LinkList p;
    if(!L) return ERROR;
    L->next=NULL;
    while(*ptr) ptr++;
    ptr--;
    while(*ptr){
        p=new LNode;
        p->data=*ptr--;
        p->next=L->next;
        L->next=p;
    }
    return OK;
}

Status ListInsert_L(LinkList &L,int i,ElemType e)//在链表元素i前插入元素e
{
    LinkList p=L->next;
    int j=1;
    while(p&&j<i){
        p=p->next;
        j++;
    }
    if(!p||j>i) return ERROR;
    LinkList s=new LNode;
    s->data=e;
    s->next=p->next;
    p->next=s;
    return OK;
}


Status ListDelete_L(LinkList &L,int i,ElemType &e)//删除第i个节点,用e带回值
{
    LinkList p=L->next;
    int j=1;
    while(!p&&j<i){
        p=p->next;
        j++;
    }
    if(!p||j>i) return ERROR;
    LinkList q=p->next;
    p->next=q->next;
    e=q->data;
    free(q);
    return OK;
}

ElemType FindData_L(LinkList L,ElemType n)//查找元素n
{
    LinkList p=L->next;
    int j=1;
    while(p){
        if(p->data==n)
            break;
        p=p->next;
        j++;
    }
    return j;
}

void MergeList_L(LinkList &LA,LinkList &LB)//合并两个链表
{
    LinkList pa=LA->next,pb=LB->next;
    if(pb->next)
        pb=pb->next;
    pa=LA->next;
    LA->next=LB->next;
    pb->next=pa;
    free(LB);
}

void ListTraver_L(LinkList L)//打印链表元素
{
    LinkList p=L->next;
    while(p){
        cout<<p->data<<" ";
        p=p->next;
    }
    cout<<"\n"<<endl;
}

void InputList_L(ElemType *p)//输入数据
{
    int i,n;
    cin>>n;
    for(i=0;i<n;i++)
        cin>>*p++;
}

//vs2008报错

1>------ 已启动生成: 项目: linklist, 配置: Debug Win32 ------
1>正在链接...
1>linklist.obj : error LNK2019: 无法解析的外部符号 "void __cdecl MergeList_L(struct LNode *,struct LNode *)" (?MergeList_L@@YAXPAULNode@@0@Z),该符号在函数 _wmain 中被引用
1>linklist.obj : error LNK2019: 无法解析的外部符号 "int __cdecl ListDelete_L(struct LNode *,int,int)" (?ListDelete_L@@YAHPAULNode@@HH@Z),该符号在函数 _wmain 中被引用
1>linklist.obj : error LNK2019: 无法解析的外部符号 "int __cdecl ListInsert_L(struct LNode *,int,int)" (?ListInsert_L@@YAHPAULNode@@HH@Z),该符号在函数 _wmain 中被引用
1>linklist.obj : error LNK2019: 无法解析的外部符号 "int __cdecl InitList_L(struct LNode *,int *)" (?InitList_L@@YAHPAULNode@@PAH@Z),该符号在函数 _wmain 中被引用
1>C:\Users\air\Documents\Visual Studio 2008\Projects\linklist\Debug\linklist.exe : fatal error LNK1120: 4 个无法解析的外部命令
1>生成日志保存在“file://c:\Users\air\Documents\Visual Studio 2008\Projects\linklist\linklist\Debug\BuildLog.htm”
1>linklist - 5 个错误,0 个警告
========== 生成: 成功 0 个,失败 1 个,最新 0 个,跳过 0 个 ==========

请把fun.cpp改为declar.cpp试试


函数的声明和定义的函数签名都不一样能成功怪了。。。

Status InitList_L(LinkList,ElemType *);//创建带头节点的单链表         -- 这是你的声明
Status InitList_L(LinkList &L,ElemType *ptr) // !!! 第一个参数不同   -- 定义却是这样的

你的declara.h声明的函数与你在fun.cpp实现的函数签名不一样,肯定失败

//declar.h
Status InitList_L(LinkList,ElemType *);//创建带头节点的单链表
Status ListInsert_L(LinkList,int,ElemType);//在链表元素i前插入元素e
Status ListDelete_L(LinkList,int,ElemType);//删除第i个节点,用e带回
ElemType FindData_L(LinkList,ElemType);//查找元素n
void MergeList_L(LinkList,LinkList);//合并两个链表
void ListTraver_L(LinkList);//打印链表元素
void InputList_L(ElemType *);//输入数据
//declar.h
//修改之后
Status InitList_L(LinkList &, ElemType *);//创建带头节点的单链表
Status ListInsert_L(LinkList &, int, ElemType);//在链表元素i前插入元素e
Status ListDelete_L(LinkList &, int, ElemType &);//删除第i个节点,用e带回
ElemType FindData_L(LinkList, ElemType);//查找元素n
void MergeList_L(LinkList &, LinkList &);//合并两个链表
void ListTraver_L(LinkList);//打印链表元素
void InputList_L(ElemType *);//输入数据
【热门文章】
【热门文章】