错误:calcChksum重新编译时类型不匹配 [英] error : type mismatch in redlaration of calcChksum

查看:102
本文介绍了错误: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 method CalcChksum needs to appear above your main. Or you'll at least need to forward-declare it.

Other than that, calling CalcChksum 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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆