每个构造函数成员初始化器列表初始化const数据成员,错误:没有匹配的调用函数

尿毒症

我有以下课程:

oo

class Foo {
public:
  struct Bus {
    SPIClass *spi;
    const uint8_t pin;
  };

  constexpr Foo(SPIClass *spi, uint8_t csPin) :
      _bus({.spi{spi}, .pin{csPin}}) {}

protected:
  const Bus _bus;
  };

由于const成员_bus,我使用构造函数中的初始化列表初始化了它们。但是以某种方式无法识别它,并引发以下编译错误:

error: no matching function for call to 'Foo::Bus::Bus(<brace-enclosed initializer list>)'
       _bus({.spi{spi}, .pin{csPin}}) {}
                                    ^
note: candidate: 'constexpr Foo::Bus::Bus(const TMC::Motionctrl::Bus&)'
   struct Bus {
          ^~~
note:   no known conversion for argument 1 from '<brace-enclosed initializer list>' to 'const Foo::Bus&'
note: candidate: 'constexpr Foo::Bus::Bus(Foo::Bus&&)'
note:   no known conversion for argument 1 from '<brace-enclosed initializer list>' to 'Foo::Bus&&'
error: member 'Foo::_bus' must be initialized by mem-initializer in 'constexpr' constructor
       _bus({.spi{spi}, .pin{csPin}}) {}                             
                                       ^

我猜第二个错误是因为初始化失败,但是我找不到错误。我正在使用GCC(GNU Arm嵌入式工具链),构建命令参数是

\ packages \ STM32 \ tools \ arm-none-eabi-gcc \ 8.2.1-1.7 / bin / arm-none-eabi-g ++“ -mcpu = cortex-m3 -mthumb” @E:\ xxx \ Release / sketch / build_opt.h” -c -Os -Wall -Wextra -std = gnu ++ 14 -ffunction-sections -fdata-sections -nostdlib -fno-threadsafe-statics --param max-inline-insns-single = 500 -fno- rtti -fno-exceptions -fno-use-cxa-atexit -MMD“-

谢谢!

阿特耶

指定的初始化程序的GNU扩展仅支持该.designator = arg格式,而不支持.designator{arg}C ++ 20中引入格式。在更高版本的gcc中,括号初始化程序形式也被接受为gcc扩展。

解决方法是不使用扩展名或使用equals初始化程序:

_bus({.spi = spi, .pin = csPin})  // GNU extension or C++20
_bus{spi, csPin}  // C++11

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用成员初始化器列表没有匹配的函数调用错误

来自分类Dev

在构造函数成员初始化之前调用成员函数的语法

来自分类Dev

c ++构造函数成员初始化:传递参数

来自分类Dev

在类构造函数成员初始化器列表上有条件地构造一个`boost :: optional`成员变量

来自分类Dev

如何在构造函数的成员初始化器列表中调用两个函数?

来自分类Dev

没有初始化列表的初始化成员变量和没有默认构造函数的类型?

来自分类Dev

在类声明或构造函数初始化器列表中初始化简单成员

来自分类Dev

初始化 const 成员并使用父构造函数

来自分类Dev

有没有办法在初始化列表中调用成员函数?

来自分类Dev

错误:没有匹配函数用于构造函数初始化的调用

来自分类Dev

成员初始化器列表:从返回元组的函数初始化两个成员

来自分类Dev

在构造函数中使用输出参数函数初始化const成员的调用的代码比lambda简单

来自分类Dev

用错误初始化构造函数中的成员

来自分类Dev

构造函数的成员初始化器列表不能包含超类的成员?

来自分类Dev

类C ++的静态函数成员中的静态数据成员的初始化顺序

来自分类Dev

从构造函数中的std :: istream初始化const类数据成员

来自分类Dev

C ++初始化程序列表成员仍在调用默认构造函数?

来自分类Dev

Visual Studio编译器错误:对委托构造函数的调用应是唯一的成员初始化程序

来自分类Dev

没有主体或成员初始化的类构造函数?

来自分类Dev

C ++没有匹配的构造函数的[]初始化

来自分类Dev

使用成员函数初始化数据成员

来自分类Dev

使用成员函数初始化数据成员

来自分类Dev

构造函数是否忽略提供给构造函数的参数成员初始化列表的一部分?

来自分类Dev

为什么在构造函数初始化程序中初始化 const char 数组成员不兼容?

来自分类Dev

空且默认的构造函数和成员初始化

来自分类Dev

构造函数中初始化嵌套成员的语法?

来自分类Dev

C ++成员初始化和构造函数

来自分类Dev

复制构造函数是否重新初始化文件成员

来自分类Dev

非原始成员初始化中的复制构造函数

Related 相关文章

  1. 1

    使用成员初始化器列表没有匹配的函数调用错误

  2. 2

    在构造函数成员初始化之前调用成员函数的语法

  3. 3

    c ++构造函数成员初始化:传递参数

  4. 4

    在类构造函数成员初始化器列表上有条件地构造一个`boost :: optional`成员变量

  5. 5

    如何在构造函数的成员初始化器列表中调用两个函数?

  6. 6

    没有初始化列表的初始化成员变量和没有默认构造函数的类型?

  7. 7

    在类声明或构造函数初始化器列表中初始化简单成员

  8. 8

    初始化 const 成员并使用父构造函数

  9. 9

    有没有办法在初始化列表中调用成员函数?

  10. 10

    错误:没有匹配函数用于构造函数初始化的调用

  11. 11

    成员初始化器列表:从返回元组的函数初始化两个成员

  12. 12

    在构造函数中使用输出参数函数初始化const成员的调用的代码比lambda简单

  13. 13

    用错误初始化构造函数中的成员

  14. 14

    构造函数的成员初始化器列表不能包含超类的成员?

  15. 15

    类C ++的静态函数成员中的静态数据成员的初始化顺序

  16. 16

    从构造函数中的std :: istream初始化const类数据成员

  17. 17

    C ++初始化程序列表成员仍在调用默认构造函数?

  18. 18

    Visual Studio编译器错误:对委托构造函数的调用应是唯一的成员初始化程序

  19. 19

    没有主体或成员初始化的类构造函数?

  20. 20

    C ++没有匹配的构造函数的[]初始化

  21. 21

    使用成员函数初始化数据成员

  22. 22

    使用成员函数初始化数据成员

  23. 23

    构造函数是否忽略提供给构造函数的参数成员初始化列表的一部分?

  24. 24

    为什么在构造函数初始化程序中初始化 const char 数组成员不兼容?

  25. 25

    空且默认的构造函数和成员初始化

  26. 26

    构造函数中初始化嵌套成员的语法?

  27. 27

    C ++成员初始化和构造函数

  28. 28

    复制构造函数是否重新初始化文件成员

  29. 29

    非原始成员初始化中的复制构造函数

热门标签

归档