可能是一个非常简单的问题,但我无法弄清楚原因。所有给定的代码都在同一个文件中。
这是其中一个数组的定义。它是在每种方法之外定义的。
unsigned char KEY_40_COMPARE_VALUES[] = {
85,102
,119,134
,147,158
,165,169
,169,165
,158,147
,134,119
,102,85
,67,50
,35,22
,11,4
,0,0
,4,11
,22,35
,50,67
};
这是代码:
unsigned char * getCompareValuesForIndex(char index)
{
if (index == 0)
{
return KEY_28_COMPARE_VALUES;
}
if (index == 1)
{
return KEY_30_COMPARE_VALUES;
}
if (index == 2)
{
return KEY_32_COMPARE_VALUES;
}
if (index == 3)
{
return KEY_33_COMPARE_VALUES;
}
if (index == 4)
{
return KEY_35_COMPARE_VALUES;
}
if (index == 5)
{
return KEY_37_COMPARE_VALUES;
}
if (index == 6)
{
return KEY_39_COMPARE_VALUES;
}
else
{
return KEY_40_COMPARE_VALUES;
}
}
这是我得到的编译错误:
conflicting types for 'getCompareValuesForIndex'
答案 0 :(得分:3)
这样的错误通常发生在为函数调用之前调用函数,并在文件中声明之前。在这种情况下,编译器假定
int
和int
基本上,函数对编译器来说是这样的:
int getCompareValuesForIndex(int index) { // <<= What compiler thinks
...
}
当编译器看到实际声明时,会发出错误。
要解决此问题,要么(1)在调用之前提供函数原型,要么(2)将定义移到首次使用函数之前。
注意:考虑到这个问题,请考虑通过添加静态数组来优化您的功能,如下所示:
unsigned char *KEY_COMPARE_VALUES[] = {
KEY_28_COMPARE_VALUES
, KEY_30_COMPARE_VALUES
, KEY_32_COMPARE_VALUES
, KEY_33_COMPARE_VALUES
, KEY_35_COMPARE_VALUES
, KEY_37_COMPARE_VALUES
, KEY_39_COMPARE_VALUES
};
现在您的功能可以像这样重写:
unsigned char * getCompareValuesForIndex(char index) {
return (index >=0 && index < 7) ? KEY_COMPARE_VALUES[index] : KEY_40_COMPARE_VALUES;
}