graphics_draw_text(ctx, s_time_text, s_font, bounds, GTextOverflowModeWordWrap, GTextAlignmentLeft, NULL);take the address with &.
Incompatible integer to pointer conversion passing 'char' to parameter of type 'const char *'
我想要的只是我在画布上绘制的文字显示时间, s_time_text 。
我理解基本数据类型,但指针仍然让我感到困惑。如果我使用普通的文本图层,它可以正常工作,但似乎是当我在画布图层上绘制文本时,它会感到沮丧。以下是相关部分的摘录。
void graphics_draw_text(GContext *ctx, const char *text, GFont const font,
const GRect box, const GTextOverflowMode overflow_mode, const GTextAlignment alignment,
GTextAttributes *text_attributes);
static char s_time_text;
static void prv_handle_minute_tick(struct tm *tick_time, TimeUnits units_changed)
{
char s_time_text[] = "00:00";
char *time_format = clock_is_24h_style() ? "%H:%M" : "%I:%M";
strftime(s_time_text, sizeof(s_time_text), time_format, tick_time);
}
static void canvas_update_proc(Layer *layer, GContext *ctx) {
s_font = fonts_load_custom_font(resource_get_handle(RESOURCE_ID_FREEMONO_18));
GRect bounds = GRect(0, 0, 60, 20);
graphics_context_set_text_color(ctx, GColorBlack);
graphics_draw_text(ctx, s_time_text, s_font, bounds, GTextOverflowModeWordWrap, GTextAlignmentLeft, NULL);
}
答案 0 :(得分:4)
您在全局上下文中将s_time_text
两次声明为char,在函数prv_handle_minute_tick
中第二次声明为local char []变量。
如果必须在此编译单元(文件)范围内可见,请删除第二个并将全局修改为:
static char s_time_text[]= "00:00";
但请记住 - 它只有6个字符(包括结束零)
答案 1 :(得分:2)
graphics_draw_text
函数的第二个参数
char *
graphics_draw_text(GContext * ctx, const char * text, GFont const font, const GRect box, const GTextOverflowMode overflow_mode, const GTextAlignment alignment, GTextAttributes * text_attributes)
但s_time_text
被声明为文件全局char
。
static char s_time_text;
s_time_text
函数范围内的canvas_update_proc
不是您在prv_handle_minute_tick
函数中声明的那个。
答案 2 :(得分:1)
要添加其他答案,会发生的情况是编译器会在调用char s_time_text
时替换全局graphics_draw_text(ctx, s_time_text, ..
,但首先会将此char
提升为int
,然后抱怨整数不能转换为指针。