博主在用vs2013写一些工程项目的时候,常常会出现这样的错误,error LNK2019: 无法解析的外部符号 _SeqListPushBack,该符号在函数 _SeqListTest1 中被引用
为什么会常常发生这样的错误呢?
一般博主我写工程的时候,习惯把声明函数,以及在测试源文件中把框架全部写好,然后在进行一步步完善具体内容,以我的工程为例,define_SeqList.h、define_SeqList.c、test.c。代码如下:
#define _CRT_SECURE_NO_WARNINGS 1
#pragma once
#include
#include
#include
#define INIT_NUM 4
typedef int SLDataType,SLD;
typedef struct SeqList
{
SLDataType* array;
size_t size;
size_t capacity;
}SL,SeqList;
void SeqListInit(SL* ps);//初始化
void SeqListPushBack(SL* ps, SLDataType x);//表尾插
void SeqListPopBack(SL* ps);//表尾删
void SeqListPushFront(SL* ps, SLDataType x);//表头插
void SeqListPopFront(SL* ps);//表头删
void CheckCapacity(SL* ps);//容量检查,不足则 两倍增容
void SeqListInsert(SL* ps, int pos,SLDataType x);//中间插
void SeqListErase(SL* ps, int pos);//中间删
void SeqListFind(SL* ps,int pos);//查表
void SeqListSort(SL* ps);//表排序,qsor回调函数的复习
void SeqListPrint(SL* ps);//表打印
void SeqDestroy(SL* ps);//表销毁,free
#define _CRT_SECURE_NO_WARNINGS 1
#include "define_SeqList.h"
void SeqListInit(SL* ps)
{
assert(ps);
ps->array = (SLDataType*)malloc(sizeof(SLDataType)*INIT_NUM);
if (ps->array == NULL)
{
perror("错误信息");
}
ps->capacity = INIT_NUM;
ps->size = 0;
}
#define _CRT_SECURE_NO_WARNINGS 1
#include "define_SeqList.h"
void SeqListTest1()
{
SL s;
//初始化
SeqListInit(&s);
//表尾插
SeqListPushBack(&s, 1);
SeqListPushBack(&s, 2);
SeqListPushBack(&s, 3);
SeqListPushBack(&s, 4);
SeqListPushBack(&s, 5);
SeqListPushBack(&s, 6);
SeqListPushBack(&s, 7);
//表尾删
SeqListPopBack(&s);
SeqListPopBack(&s);
//表头插
SeqListPushFront(&s, -1);
SeqListPushFront(&s, 0);
//表头删
SeqListPopFront(&s);
SeqListPopFront(&s);
//中间插
SeqListInsert(&s, 3, 8);
SeqListInsert(&s, 4, 9);
SeqListInsert(&s, 4, 15);
SeqListInsert(&s, 4, 9);
SeqListInsert(&s, 4, 9);
SeqListInsert(&s, 4, 16);
//中间删
SeqListErase(&s, 3);
SeqListErase(&s, 3);
//查表
SeqListFind(&s, 4);
//表排序,qsor回调函数的复习
SeqListSort(&s);
//表打印
SeqListPrint(&s);
//表销毁
SeqDestroy(&s);
}
int main()
{
SeqListTest1();
return 0;
}
在上面的示例当中,我仅仅写好了顺序表的初始化,即void SeqListInit(SL* ps),但调试的时候却不能正常运行,这是因为你并没有将其他声明函数的具体内容所写出来,这样就会出现文章开头的错误显示:error LNK2019: 无法解析的外部符号 _SeqListPushBack,该符号在函数 _SeqListTest1 中被引用
那么该如何解决呢?具体的原理我暂时不是很清楚,但是有一个很好的解决办法就是将define_SeqList.h文件和test.c未写出具体内容的函数注释掉就可以进行调试了。
例如:
#define _CRT_SECURE_NO_WARNINGS 1
#pragma once
#include
#include
#include
#define INIT_NUM 4
typedef int SLDataType,SLD;
typedef struct SeqList
{
SLDataType* array;
size_t size;
size_t capacity;
}SL,SeqList;
void SeqListInit(SL* ps);//初始化
//void SeqListPushBack(SL* ps, SLDataType x);//表尾插
//void SeqListPopBack(SL* ps);//表尾删
//void SeqListPushFront(SL* ps, SLDataType x);//表头插
//void SeqListPopFront(SL* ps);//表头删
//void CheckCapacity(SL* ps);//容量检查,不足则 两倍增容
//void SeqListInsert(SL* ps, int pos,SLDataType x);//中间插
//void SeqListErase(SL* ps, int pos);//中间删
//void SeqListFind(SL* ps,int pos);//查表
//void SeqListSort(SL* ps);//表排序,qsor回调函数的复习
//void SeqListPrint(SL* ps);//表打印
//void SeqDestroy(SL* ps);//表销毁,free
#define _CRT_SECURE_NO_WARNINGS 1
#include "define_SeqList.h"
void SeqListTest1()
{
SL s;
//初始化
SeqListInit(&s);
//表尾插
//SeqListPushBack(&s, 1);
//SeqListPushBack(&s, 2);
//SeqListPushBack(&s, 3);
//SeqListPushBack(&s, 4);
//SeqListPushBack(&s, 5);
//SeqListPushBack(&s, 6);
//SeqListPushBack(&s, 7);
表尾删
//SeqListPopBack(&s);
//SeqListPopBack(&s);
表头插
//SeqListPushFront(&s, -1);
//SeqListPushFront(&s, 0);
表头删
//SeqListPopFront(&s);
//SeqListPopFront(&s);
中间插
//SeqListInsert(&s, 3, 8);
//SeqListInsert(&s, 4, 9);
//SeqListInsert(&s, 4, 15);
//SeqListInsert(&s, 4, 9);
//SeqListInsert(&s, 4, 9);
//SeqListInsert(&s, 4, 16);
中间删
//SeqListErase(&s, 3);
//SeqListErase(&s, 3);
查表
//SeqListFind(&s, 4);
表排序,qsor回调函数的复习
//SeqListSort(&s);
表打印
//SeqListPrint(&s);
表销毁
//SeqDestroy(&s);
}
int main()
{
SeqListTest1();
return 0;
}
博主尽量用言简意赅的方法解决这样的常见问题,如果懂具体原理的小伙伴,欢迎跟我讨论哦~