Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 使用结构化绑定定义类成员_C++ - Fatal编程技术网

C++ 使用结构化绑定定义类成员

C++ 使用结构化绑定定义类成员,c++,C++,我想使用结构化绑定定义类成员a、b,如下所示: struct AB { int a; int b; }; class MyClass { public: MyClass(AB ab) : ab{ab} {} private: AB ab; const auto [a, b] = ab; } 但是,对于gcc 9.2.0,这会导致编译器错误: error: expected unqualified-id before ‘[’ token 12 |

我想使用结构化绑定定义类成员a、b,如下所示:

struct AB {
  int a;
  int b;
};

class MyClass {
  public:
    MyClass(AB ab) : ab{ab} {}

  private:
    AB ab;
    const auto [a, b] = ab;
}
但是,对于gcc 9.2.0,这会导致编译器错误:

error: expected unqualified-id before ‘[’ token
   12 |     const auto [a, b] = ab;
有没有什么方法可以用结构化绑定重写它,这样它就可以编译了?或者我必须放弃使用结构化绑定并分别定义每个成员:

  const int a = ab.a;
  const int b = ab.b;
我想定义类成员。。。使用结构化绑定

有没有什么方法可以用结构化绑定重写它,这样它就可以编译了

不可以。不能将结构化绑定作为成员

或者我必须放弃使用结构化绑定并分别定义每个成员:

  const int a = ab.a;
  const int b = ab.b;
这将是一个很好的形式

无论您如何声明成员,都不清楚您为什么希望将成员的副本作为直接成员。我建议重新考虑你的设计

我想定义类成员。。。使用结构化绑定

有没有什么方法可以用结构化绑定重写它,这样它就可以编译了

不可以。不能将结构化绑定作为成员

或者我必须放弃使用结构化绑定并分别定义每个成员:

  const int a = ab.a;
  const int b = ab.b;
这将是一个很好的形式


无论您如何声明成员,都不清楚您为什么希望将成员的副本作为直接成员。我建议您重新考虑您的设计。

是否可以选择MyClass:private AB类?这应该是你想要的。你确定你的gcc是用c++17标准编译的吗?是的-我用g++-std=c++17 c++2a编译不起作用,但是类MyClass:private是一个选项吗?这应该是你想要的。并且不会复制所有数据。您确定您的gcc使用c++17标准进行编译吗?是的-我使用g++-std=c++17 c++2a进行编译也不起作用