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

时间:2014-03-12 22:43:00

标签: 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())){}

我知道你必须按照它们在类中定义的顺序初始化变量,但是当你初始化一个对象时,这种情况又如何呢?在调用a之前,我需要bShape显式初始化,以便将正确的值返回到RectilinearAnimationStrategy。我尝试的一切都给了我

  

Triangle.h:在构造函数Triangle::Triangle(Vector, Vector, Vector, Point)中:
  Triangle.h:11:警告:Triangle::b将在
之后初始化   Triangle.cc:9:警告:基地Shape
  Triangle.cc:9:警告:在这里初始化时

非常感谢任何帮助,谢谢。

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

1 个答案:

答案 0 :(得分:4)

我知道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) {}