字段“__file::flags”的指示符顺序与“FILE”中的声明顺序不匹配

问题描述 投票:0回答:1

我正在尝试使用

本教程的 UART
来编译二进制文件 avr-g++,但在编译过程中,我收到以下错误:

main.cpp:50:20: error: designator order for field '__file::flags' does not match declaration order in 'FILE'
   50 | FILE uart_output = FDEV_SETUP_STREAM(uart_putchar, NULL, _FDEV_SETUP_WRITE);

我已确定我正在使用

/usr/avr/include/stdio.h
,并尝试根据以下情况使用 C++20:

为什么C++11不支持像C99那样的指定初始化列表?

然而我在编译(甚至理解问题)方面还没有取得任何成功。我还尝试复制 avr

stdio.h
实现源文件(第 152 行) 中的示例,但也没有成功。

非常感谢任何帮助。预先感谢。

c++ avr avr-gcc
1个回答
3
投票

看起来,

FDEV_SETUP_STREAM
尚未准备好用于C++,另请参阅示例不支持非平凡的指定初始值设定项以了解错误背后的原因。

对我有用的是重新定义

FDEV_SETUP_STREAM
以按各自的顺序包含
struct __file
的所有组件:

#undef FDEV_SETUP_STREAM
#define FDEV_SETUP_STREAM(p, g, f) \
    {                              \
        .buf = NULL,               \
        .unget = 0,                \
        .flags = f,                \
        .size = 0,                 \
        .len = 0,                  \
        .put = p,                  \
        .get = g,                  \
        .udata = 0                 \
    }

但是,编译器的行为似乎与引发该错误的时间并不一致。

这是相应的 AVR-LibC 问题 #898

© www.soinside.com 2019 - 2024. All rights reserved.