例如,在以下示例中,我希望能够将x.nest1.n
和y.nest1.n
设置为不同的值,但强制x.nest1.n === x.nest2.n
和{{ 1}} - 如何实现这个目标?
y.nest1.n === y.nest2.n
答案 0 :(得分:4)
听起来n
是A
的属性,而不是B
。您应该将B
成员参考提供给n
或其父A
。
struct A {
struct B {
int &n;
B( int &in_n ) : n( in_n ) {}
};
int n;
B nest1;
B nest2;
A::A() : n( 5 ), nest1( n ), nest2( n ) {}
};
答案 1 :(得分:1)
您无法使用static
变量执行此操作,因为根据定义,static
表示类的所有实例共享静态成员。
解决方法是将B::n
移动到A
作为非静态成员变量:
struct A {
...
int n;
struct B {
...
};
B nest1;
B nest2;
};
如果(我假设)您需要从B
方法访问此变量,那么通常的解决方案是在每个B
实例中存储一个指向其父级的引用/指针(或者在如果n
可以独立于B
使用,则至少应为其父级A
变量:
struct A {
...
int n;
struct B {
A& parent;
B(A& parent_) : parent(parent_) { ... }
...
};
B nest1;
B nest2;
A() : nest1(*this), nest2(*this) { ... }
};
答案 2 :(得分:0)
struct A {
...
struct B {
int n;
...
};
void setN(int n) {
nest1.n = n;
nest2.n = n;
}
B const& getNest1() const
{ return nest1; }
B const& getNest2() const
{ return nest2; }
private:
B nest1;
B nest2;
};