CCh*_*ste 3 c++ class initializer-list
我希望有一个简单的问题,我无法找到有关初始化“变量”的具体答案。这是有问题的初始化列表: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())){}
Run Code Online (Sandbox Code Playgroud)
我知道你必须按照类中定义的顺序初始化变量,但是当你初始化一个对象时,这种情况又如何呢?我需要a并b在调用之前显式初始化Shape,以便将正确的值返回给RectilinearAnimationStrategy. 我尝试的一切都给了我
Triangle.h:在构造函数中
Triangle::Triangle(Vector, Vector, Vector, Point):
Triangle.h:11:警告:Triangle::b将在
Triangle.cc:9之后初始化:警告:基础Shape
Triangle.cc:9:警告:在这里初始化时
非常感谢任何帮助,谢谢。
当前设置和给出的第一个答案都没有得到该错误,但输出没有考虑a和b考虑(在调用 Shape 构造函数时未初始化)
我知道 Shape 的初始化依赖于函数 bBoxMaxX(),它依赖于成员 b 的初始化。由于基类 Shape 在成员 b 之前初始化,因此代码将无法正常工作。
解决方案是让 bBoxMaxX() 函数使用初始化变量 _b。或者直接使用 _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) {}
Run Code Online (Sandbox Code Playgroud)