错误:calcChksum重新编译时类型不匹配 [英] error : type mismatch in redlaration of calcChksum
本文介绍了错误:calcChksum重新编译时类型不匹配的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
#include<stdio.h>
#include<conio.h>
int main(short argc, char** argv)
{
unsigned char serNum [] = "DS0008D-0111A";
unsigned char *ser = serNum;
unsigned short checksum;
checksum = CalcChksum(*ser,13);
printf("the checksum is %x",checksum) ;
return 0;
}
unsigned short CalcChksum(unsigned char *ptr,int bytecnt)
{
int i;
unsigned short chksum;
chksum = 0;
// Calculate 1's complement chksum
for(i=0; i<bytecnt; i++)
{
chksum += (unsigned short)*ptr;
chksum = (char)~chksum;
}
return(chksum);
}
推荐答案
首先我认为方法CalcChksum
需要出现在main
上方。或者你至少需要向前声明它。
除此之外,调用CalcChksum
这样;
First of all I think the methodCalcChksum
needs to appear above yourmain
. Or you'll at least need to forward-declare it.
Other than that, callingCalcChksum
like this;
unsigned char *ser = serNum;
checksum = CalcChksum(*ser,13);
不正确, CalcChksum
声明为;
Is incorrect, CalcChksum
is declared like;
unsigned short CalcChksum(unsigned char *ptr, int bytecnt)
所以第一个参数应该是 char *
,通过在 ser
前面加上星号,你可以从 unsigned char *
中取消引用它到 unsigned char
。
将呼叫更改为
So the first parameter should be a char*
, by putting as asterisk in front of ser
you're de-referencing that from an unsigned char *
to a unsigned char
.
Change the call to
checksum = CalcChksum(ser,13);
希望这会有所帮助,
Fredrik
Hope this helps,
Fredrik
这篇关于错误:calcChksum重新编译时类型不匹配的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文