微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

具有默认成员初始化程序的结构不能在类内部,并且不能用作默认参数

如何解决具有默认成员初始化程序的结构不能在类内部,并且不能用作默认参数

以下代码无法编译:

info

我收到以下错误

#include <iostream>

struct toto {
  struct options final {
    bool option1 = false;
    bool option2 = false;
  };

  static void func(const options &opt = {}) {
    std::cout << "option1 = " << opt.option1 << std::endl;
    std::cout << "option2 = " << opt.option2 << std::endl;
  }
};

int main() {
  toto::func();
}

但是,如果我将选项结构移到封闭的to结构之外,它将编译:

test-default-member-init.cc:12:42: error: default member initializer for 'option1' needed within deFinition of enclosing class 'toto' outside of member functions
  static void func(const options &opt = {}) {
                                         ^
test-default-member-init.cc:8:10: note: default member initializer declared here
    bool option1 = false;
         ^
test-default-member-init.cc:19:14: error: too few arguments to function call,single argument 'opt' was not specified
  toto::func();
  ~~~~~~~~~~ ^
test-default-member-init.cc:12:3: note: 'func' declared here
  static void func(const options &opt = {}) {
  ^
2 errors generated.

我在OSX上使用clang,并以此方式编译代码段:

#include <iostream>

struct options final {
  bool option1 = false;
  bool option2 = false;
};

struct toto {
  static void func(const options &opt = {}) {
    std::cout << "option1 = " << opt.option1 << std::endl;
    std::cout << "option2 = " << opt.option2 << std::endl;
  }
};

int main() {
  toto::func();
}

有人可以解释一下为什么第一个被剪掉的代码无法编译,以及是否有任何解决方案可以使它正常工作?

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。