error LNK2019: 无法解析的外部符号_SeqListPushBack,该符号在函数 _SeqListTest1 中被引用

文章目录

  • c语言常见错误
    • error LNK2019
    • define_SeqList.h
    • define_SeqList.c
    • test.c
    • define_SeqList.h(改)
    • test.c(改)

c语言常见错误

error LNK2019

博主在用vs2013写一些工程项目的时候,常常会出现这样的错误,error LNK2019: 无法解析的外部符号 _SeqListPushBack,该符号在函数 _SeqListTest1 中被引用

为什么会常常发生这样的错误呢?

一般博主我写工程的时候,习惯把声明函数,以及在测试源文件中把框架全部写好,然后在进行一步步完善具体内容,以我的工程为例,define_SeqList.h、define_SeqList.c、test.c。代码如下:

define_SeqList.h

#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_SeqList.c

#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;
}

test.c

#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;
}

error LNK2019: 无法解析的外部符号_SeqListPushBack,该符号在函数 _SeqListTest1 中被引用_第1张图片

在上面的示例当中,我仅仅写好了顺序表的初始化,即void SeqListInit(SL* ps),但调试的时候却不能正常运行,这是因为你并没有将其他声明函数的具体内容所写出来,这样就会出现文章开头的错误显示:error LNK2019: 无法解析的外部符号 _SeqListPushBack,该符号在函数 _SeqListTest1 中被引用

那么该如何解决呢?具体的原理我暂时不是很清楚,但是有一个很好的解决办法就是将define_SeqList.h文件和test.c未写出具体内容的函数注释掉就可以进行调试了。

例如:

define_SeqList.h(改)

#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


test.c(改)

#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;
}

博主尽量用言简意赅的方法解决这样的常见问题,如果懂具体原理的小伙伴,欢迎跟我讨论哦~

你可能感兴趣的:(c语言)