我正在为一个班级的项目工作。嵌入式C代码。 我正在尝试创建一个由全局声明的5个字符串的字符数组,因此我的LCD函数可以轻松地遍历列表。它们可以被声明为const但是现在我只是希望它可以毫无问题地构建。
问题是我在函数中遇到“未声明”错误,并且在构建时指向声明的“冲突类型”错误。声明看起来正确,但我想不是。我错过了什么? 一旦声明被整理出来,未声明的错误可能会自行解决。
// Declared before main()
char _cylinder_types[5];
_cylinder_types[0] = "Blk";
_cylinder_types[1] = "Wht";
_cylinder_types[2] = "Stl";
_cylinder_types[3] = "Alu";
_cylinder_types[4] = "Err";
在我的lcd.c文件中:
void lcd_display_update(void){
int i = 0;
while(i<5)
{
lcd_write(0);
lcd_position(lcd_TopLine,1);
lcd_string("SORTED:");
lcd_string(_cylinder_types[i]);
lcd_write(':');
lcd_write_Num_8(drop_number[i]);
lcd_position(lcd_BotLine,1);
lcd_string("UNSORTED:");
lcd_string(_cylinder_types[i]);
lcd_write(':');
lcd_write_Num_8(queued_number[i]);
mTimer(5000);
}
i++;
}
答案 0 :(得分:6)
只需将数组声明为
即可char * _cylinder_types[5];
^^^^^^
例如,在此表达式语句中
_cylinder_types[0] = "Blk";
字符串文字"Blk"
被隐式转换为char *
类型的右值。
你可能不会发表这些陈述
_cylinder_types[0] = "Blk";
_cylinder_types[1] = "Wht";
_cylinder_types[2] = "Stl";
_cylinder_types[3] = "Alu";
_cylinder_types[4] = "Err";
在任何功能之外。
例如,您可以初始化数组,如
char * _cylinder_types[5] =
{
"Blk", "Wht", "Stl", "Alu", "Err"
};
如果项目中有多个编译单元,那么该数组应该在标题中声明,如
extern char * _cylinder_types[5];
并在某些模块中定义,例如
char * _cylinder_types[5] =
{
"Blk", "Wht", "Stl", "Alu", "Err"
};
标题必须包含在每个模块中,其中有对数组的引用。
考虑到这个陈述
i++;
应在while循环内。
答案 1 :(得分:0)
以下提议的代码:
_
开始,因为此类名称已被保留&#39;操作系统for()
语句的第二个参数。for()
语句,因此它不会使页面的右边缘流失lcd_write( 0 );
lcd_write( '0' );
(应该传递一个字符,而不是一个整数)
醇>
现在,建议的代码:
char *cylinder_types[] =
{
"Blk",
"Wht",
"Stl",
"Alu",
"Err"
};
int main( void )
{
for(int i=0;
i < sizeof( cylinder_types ) / sizeof( char * );
i++ )
{
lcd_write( '0' );
lcd_position( lcd_TopLine, 1 );
lcd_string( "SORTED:" );
lcd_string( cylinder_types[i] );
lcd_write( ':' );
lcd_write_Num_8( drop_number[i] );
lcd_position( lcd_BotLine, 1 );
lcd_string( "UNSORTED:" );
lcd_string( cylinder_types[i] );
lcd_write( ':' );
lcd_write_Num_8( queued_number[i] );
mTimer( 5000 );
}
}