这实际上是两个问题,如下所示:
目前我有一些公共的内部帮助结构体(严格用作一个对象传递数据),在构造类的实例时,我尝试使用初始化列表而不是赋值,但编译器抱怨单个结构体成员,所以我添加了结构体的构造函数...但这似乎是错误的方向。
有没有一种方法可以在初始化列表中初始化结构体而不使用构造函数?
这些辅助程序是否更适合作为外部类?
```c++ class Foo { public: struct Bar { double mass; std::pair gravMod; std::pair position; std::pair velocity; bool falling; Bar() : mass(0.0), gravMod(std::make_pair(0.0, 0.0)), position(std::make_pair(0.0, 0.0)), velocity(std::make_pair(0.0, 0.0)), falling(false) { }; Bar(double _mass, std::pair _gravMod, std::pair _position, std::pair _velocity, bool _falling) : mass(_mass), gravMod(_gravMod), position(_position), velocity(_velocity), falling(_falling) { } Bar(const Bar& other) : mass(other.mass), gravMod(other.gravMod), position(other.position), velocity(other.velocity), falling(other.falling) { } };
struct Baz { std::pair acceleration; std::pair force; Baz() : acceleration(std::make_pair(0.0, 0.0)), force(std::make_pair(0.0, 0.0)) { } Baz(std::pair _acceleration, std::pair _force) : acceleration(_acceleration), force(_force) { } Baz(const Baz& other) : acceleration(other.acceleration), force(other.force) { } }; protected: private: Bar _currBar; Bar _prevBar; Baz _currBaz; Baz _prevBaz; }; ```
编辑:
示例及其相关错误:
```c++ Foo::Foo() : _currBar{0.0, std::make_pair(0.0, 0.0), std::make_pair(0.0, 0.0), std::make_pair(0.0, 0.0), false}, _currBaz{std::make_pair(0.0, 0.0), std::make_pair(0.0, 0.0)} { } ```
目前我有一些公共的内部帮助结构体(严格用作一个对象传递数据),在构造类的实例时,我尝试使用初始化列表而不是赋值,但编译器抱怨单个结构体成员,所以我添加了结构体的构造函数...但这似乎是错误的方向。
有没有一种方法可以在初始化列表中初始化结构体而不使用构造函数?
这些辅助程序是否更适合作为外部类?
```c++ class Foo { public: struct Bar { double mass; std::pair gravMod; std::pair position; std::pair velocity; bool falling; Bar() : mass(0.0), gravMod(std::make_pair(0.0, 0.0)), position(std::make_pair(0.0, 0.0)), velocity(std::make_pair(0.0, 0.0)), falling(false) { }; Bar(double _mass, std::pair _gravMod, std::pair _position, std::pair _velocity, bool _falling) : mass(_mass), gravMod(_gravMod), position(_position), velocity(_velocity), falling(_falling) { } Bar(const Bar& other) : mass(other.mass), gravMod(other.gravMod), position(other.position), velocity(other.velocity), falling(other.falling) { } };
struct Baz { std::pair acceleration; std::pair force; Baz() : acceleration(std::make_pair(0.0, 0.0)), force(std::make_pair(0.0, 0.0)) { } Baz(std::pair _acceleration, std::pair _force) : acceleration(_acceleration), force(_force) { } Baz(const Baz& other) : acceleration(other.acceleration), force(other.force) { } }; protected: private: Bar _currBar; Bar _prevBar; Baz _currBaz; Baz _prevBaz; }; ```
编辑:
示例及其相关错误:
```c++ Foo::Foo() : _currBar{0.0, std::make_pair(0.0, 0.0), std::make_pair(0.0, 0.0), std::make_pair(0.0, 0.0), false}, _currBaz{std::make_pair(0.0, 0.0), std::make_pair(0.0, 0.0)} { } ```
_currBar{
抛出错误: 期望 '('
. 第一个 }
抛出错误: 期望';'
.
Foo::Foo() : _currBar.mass(0.0), _currBar.gravMod(std::make_pair(0.0, 0.0)), _currBar.position(std::make_pair(0.0, 0.0)), _currBar.velocity(std::make_pair(0.0, 0.0)), _currBar.falling(false) { }
第一个 _currBar.
抛出错误: 期望 '('
. 所有其余的 _currBar.
都抛出错误: 成员 'Foo::_currBar' 已经被初始化。
.