c# 从“const char *”对“char”的赋值从指针生成整数而不强制转换

gijlo24d  于 2022-11-20  发布在  C#
关注(0)|答案(1)|浏览(203)

我是一个C新手,在尝试将我的next_frame存储在一个变量中时遇到了一个问题。任何帮助都是很好的,因为我想这可能是我遗漏的一些简单的东西。
如果我只是改变以下内容,它就可以正常工作,只有当我试图将next_frame存储在变量中时,它才不能编译。

// Doesn't compile
oled_write_raw_P(next_frame, FRAME_SIZE);

// Compiles
oled_write_raw_P(frames[abs((FRAME_COUNT - 1) - current_frame)];, FRAME_SIZE);

完整代码

#define FRAME_COUNT 5 // Animation Frames
#define FRAME_SIZE 256
#define FRAME_DURATION 200 // MS duration of each frame

// Variables
uint32_t timer = 0;
uint8_t current_frame = 0;
char next_frame;

static void render_animation(void) {
    static const char PROGMEM frames[FRAME_COUNT][FRAME_SIZE] = {
        // Images here, removed for example
    };

    // If timer is more than 200ms, animate
    if (timer_elapsed32(timer) > FRAME_DURATION) {
        timer = timer_read32();
        current_frame = (current_frame + 1) % FRAME_COUNT;
        next_frame = frames[abs((FRAME_COUNT - 1) - current_frame)];

        // Set cursor position
        oled_set_cursor(128, 0);

        // Write next frame
        oled_write_raw_P(next_frame, FRAME_SIZE);
        
    }
}

错误如下:
错误:从'const char *'赋值给'char',从指针生成整数,但没有转换[-Weror = int转换] next_frame = frames[abs((FRAME_COUNT - 1)- current_frame)];
错误:传递'oled_write_raw_P'的参数1从整数生成指针而不进行转换[-Werror=int-conversion] oled_write_raw_P(next_frame,FRAME_SIZE);

7z5jn7bk

7z5jn7bk1#

next_frame = frames[abs((FRAME_COUNT - 1) - current_frame)]

没有任何意义。
您要为其赋值的变量next_frame的类型为char。但是,您要为其赋值表达式

frames[abs((FRAME_COUNT - 1) - current_frame)]

其中decays指向指向子数组第一个元素的指针,因此表达式的计算结果为const char *类型的值。
我不太清楚您想要完成什么,但我猜您的问题的解决方案是将next_frame的类型更改为const char *,以便类型匹配。

char next_frame;

至:

const char *next_frame;

相关问题