不能 return 静态数组
Can't return static array
可能是一个非常简单的问题,但我无法找出原因。所有给定的代码都在同一个文件中。
这是其中一个数组的定义。它是在每个方法之外定义的。
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'
当您在为函数提供原型并在其在文件中声明之前调用函数时,通常会发生此类错误。在这种情况下,编译器假定
- 函数接受的任何参数都是
int
和 类型
- 函数returns的值是
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;
}
可能是一个非常简单的问题,但我无法找出原因。所有给定的代码都在同一个文件中。
这是其中一个数组的定义。它是在每个方法之外定义的。
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'
当您在为函数提供原型并在其在文件中声明之前调用函数时,通常会发生此类错误。在这种情况下,编译器假定
- 函数接受的任何参数都是
int
和 类型
- 函数returns的值是
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;
}