类变量将在基类之后初始化

Class variable will be initialized after base class

本文关键字:之后 初始化 基类 类变量      更新时间:2023-10-16

我希望有一个简单的问题,我找不到一个具体的答案,关于"变量"被初始化。下面是有问题的初始化列表:Triangle.cc

Triangle::Triangle(Vector _a, Vector _b, Vector s, Point o)
    : a(_a), b(_b), Shape(o, new RectilinearAnimationStrategy(s, bBoxMaxX(), bBoxMinX(), bBoxMaxY(), bBoxMinY())){}

我知道你必须按照在类中定义的顺序初始化变量,但是当你初始化一个对象的时候呢?我需要在调用Shape之前显式初始化ab,以便将正确的值返回给RectilinearAnimationStrategy。我所尝试的一切都给了我

Triangle.h: In constructor Triangle::Triangle(Vector, Vector, Vector, Point):
Triangle.h:11: warning: Triangle::b将在
之后初始化三角形。cc:9: base Shape
三角形。Cc:9:警告:此处初始化

任何帮助都是非常感激的,谢谢。

我没有得到当前设置的错误,也没有给出第一个答案,但输出不考虑ab(未初始化时,形状构造函数被调用)

我理解Shape的初始化取决于函数bBoxMaxX(),这取决于成员b的初始化。由于基类Shape在成员b之前初始化,代码将无法正常工作。

解决方案是使用初始化变量_b的bBoxMaxX()函数。或者直接使用_b的Shape初始化器。例如:

Triangle::Triangle(Vector _a, Vector _b, Vector s, Point o) : Shape(o, new RectilinearAnimationStrategy(s, bBoxMaxX(_b), bBoxMinX(_b), bBoxMaxY(_b), bBoxMinY(_b))),  a(_a), b(_b) {}