c语言提示error LNK2019: 无法解析的外部符号

在c语言中实现对对象的管理

前面的代码是这样的

#include
#include
#include "ObjMgt.h"
typedef struct key{
unsigned int key1;
unsigned int key2;
unsigned int key3;
struct key * next;
}keyall ;

/*************************************************************************
功能:增加单个对象
输入:
key1 外部关键字 KEY1
key2 外部关键字KEY2
key3 外部关键字KEY3
输出:无
返回:
-1 :失败(对象已经存在或者其它异常)
0 :成功
***************************************************************************/
int length=0;
keyall phead;
keyall *pend;
int Addkeyall (unsigned int key1, unsigned int key2, unsigned int key3)
{
if(phead==NULL){
phead=(keyall *)malloc(sizeof(keyall));
pend=phead;
}
if(length>10000)
return -1;
keyall *p=phead;
while(p!=NULL)
{
if(p->key1==key1&&p->key2==key2&&p->key3==key3)
return -1;
p=p->next;
}
keyall * temp;
temp=(keyall * )malloc(sizeof(keyall));
temp->key1=key1;
temp->key2=key2;
temp->key3=key3;
pend->next=temp;
pend=temp;
pend->next=NULL;
length++;
/
请实现*/
return 0;
}

/********************************************************************************
功能:删除一个或多个对象
输入:
key1 外部关键字 KEY1
key2 外部关键字 KEY2
key3 外部关键字 KEY3
输出:无
返回:无

说明:用例保证参数取值为合法值和通配符0xFFFFFFFF, 通配符表示0~65535范围内的任意值;
举例:key1=1,key2=2,key3= 0xFFFFFFFF,表示删除key1=1,key2=2的所有对象;
key1,key2,key3取值全为0xFFFFFFFF时,表示删除所有对象。
*********************************************************************************/
void Deletekeyall (unsigned int key1, unsigned int key2, unsigned int key3)
{
keyall *p;
keyall *pre;
p=phead->next;
pre=phead;
bool keya=false;
bool keyb=false;
bool keyc=false;
if(key1==0xFFFFFFFF) keya=true;
if(key2==0xFFFFFFFF) keyb=true;
if(key3==0xFFFFFFFF) keyc=true;
while(p!=NULL)
{
if((keya||p->key1==key1)&&(keyb||p->key2==key2)&&(keya||p->key3==key3))
{
pre->next=p->next;
free(p);
p=pre->next;
}
else
{
pre=p;
p=p->next;
}
}

return ;

}

/********************************************************************************
功能:查询单个对象是否存在
输入:
key1 外部关键字 KEY1
key2 外部关键字 KEY2
key3 外部关键字 KEY3
输出:无
返回:
0:不存在
1:存在
**********************************************************************************/
int IskeyallExist (unsigned int key1, unsigned int key2, unsigned int key3)
{
/*请实现*/
keyall *p;
p=phead->next;
while(p!=NULL)
{
if(key1==p->key1&&key2==p->key2&&key3==p->key3)
return 1;
}
return 0;
}

/******************************************************************************************************
Description 清空所有对象
Prototype void Clear();
Input Param 无
Output Param 无
Return Value 无

********************************************************************************************************/
void Clear(void)
{
/*在这里实现功能*/
return;
}

别人的代码可以使用的是这样的

#include "ObjMgt.h"

#include

using namespace std;

typedef struct{

unsigned int key1;

unsigned int key2;

unsigned int key3;

}KEY;

vector allKey;

/*************************************************************************
功能:增加单个对象
输入:
key1 外部关键字 KEY1

key2 外部关键字KEY2
key3 外部关键字KEY3
输出:无
返回:

-1 :失败(对象已经存在或者其它异常)
0 :成功
***************************************************************************/

int AddObject (unsigned int key1, unsigned int key2, unsigned int key3)

{

/*请实现*/

if(allKey.size() > 10000)

return -1;

if(key1 > 65535 || key2 > 65535 || key3 > 65535)

return -1;

int i,j = allKey.size();

for(i = 0; i < j;i++)

if(allKey[i].key1 == key1 && allKey[i].key2 == key2 && allKey[i].key3 == key3)

return -1;

KEY k = {key1,key2,key3};  
allKey.push_back(k);  
return 0;  

}

/********************************************************************************
功能:删除一个或多个对象
输入:
key1 外部关键字 KEY1

key2 外部关键字 KEY2
key3 外部关键字 KEY3
输出:无
返回:无

说明:用例保证参数取值为合法值和通配符0xFFFFFFFF, 通配符表示0~65535范围内的任意值;

举例:key1=1,key2=2,key3= 0xFFFFFFFF,表示删除key1=1,key2=2的所有对象;
key1,key2,key3取值全为0xFFFFFFFF时,表示删除所有对象。
*********************************************************************************/

void DeleteObject (unsigned int key1, unsigned int key2, unsigned int key3)

{

/*请实现*/

bool allKey1,allKey2,allKey3;

if(key1 == 0xffffffff)

allKey1 = true;

else

allKey1 = false;

if(key2 == 0xffffffff)

allKey2 = true;

else

allKey2 = false;

if(key3 == 0xffffffff)

allKey3 = true;

else

allKey3 = false;

int i,j = allKey.size();

vector::iterator it ;

it = allKey.begin();

while (it != allKey.end())

{

if(allKey1 || it->key1 == key1)

if(allKey2 || it->key2 == key2)

if(allKey3 || it->key3 == key3){

it = allKey.erase(it);

continue;

}

it++;

}

return ;  

}

/********************************************************************************
功能:查询单个对象是否存在
输入:
key1 外部关键字 KEY1

key2 外部关键字 KEY2
key3 外部关键字 KEY3
输出:无
返回:
0:不存在
1:存在
**********************************************************************************/

int IsObjectExist (unsigned int key1, unsigned int key2, unsigned int key3)

{

/*请实现*/

if(key1 > 65535 || key2 > 65535 || key3 > 65535)

return 0;

int i,j = allKey.size();

for(i = 0; i < j;i++)

if(allKey[i].key1 == key1 && allKey[i].key2 == key2 && allKey[i].key3 == key3)

return 1;

return 0;

}

/******************************************************************************************************
Description 清空所有对象
Prototype void Clear();
Input Param 无
Output Param 无
Return Value 无

********************************************************************************************************/

void Clear(void)

{

/*在这里实现功能*/

allKey.clear();

return;

}

结果我的连接出现如下错误

1>正在链接...
1>CExampleTest.obj : error LNK2019: 无法解析的外部符号 "void __cdecl DeleteObject(unsigned int,unsigned int,unsigned int)" (?DeleteObject@@YAXIII@Z),该符号在函数 "public: void __thiscall CExampleTest::TestCase01(void)" (?TestCase01@CExampleTest@@QAEXXZ) 中被引用
1>CExampleTest.obj : error LNK2019: 无法解析的外部符号 "int __cdecl IsObjectExist(unsigned int,unsigned int,unsigned int)" (?IsObjectExist@@YAHIII@Z),该符号在函数 "public: void __thiscall CExampleTest::TestCase01(void)" (?TestCase01@CExampleTest@@QAEXXZ) 中被引用
1>CExampleTest.obj : error LNK2019: 无法解析的外部符号 "int __cdecl AddObject(unsigned int,unsigned int,unsigned int)" (?AddObject@@YAHIII@Z),该符号在函数 "public: void __thiscall CExampleTest::TestCase01(void)" (?TestCase01@CExampleTest@@QAEXXZ) 中被引用
1>C:\Users\wang\Desktop\对象管理器\ObjMgt\project\Debug\ObjMgt.exe : fatal error LNK1120: 3 个无法解析的外部命令
1>生成日志保存在“file://c:\Users\wang\Desktop\对象管理器\ObjMgt\project\Debug\BuildLog.htm”
1>ObjMgt - 4 个错误,0 个警告
========== 生成: 0 已成功, 1 已失败, 0 最新, 0 已跳过 ==========

找了一天了 把网上能够试一试的都试了一遍 ,还是不行

2个回答

木有看到 TestCase01 的源代码,所以无法确认其中对 DeleteObject/IsObjectExist/AddObject 是如何调用的。
是链接的错误,至少这些函数声明所在的头文件已经被编译器识别到。但源文件好像是没有被正确的编译,这个需要看工程是否正确的包含了源文件。

DeleteObject IsObjectExist,这些函数的实现代码在哪?你要加到你的工程一起编译生成obj,然后link进程序。

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