2014-03-12 119 views
1

我希望有一个简单的问题,我无法找到关于'变量'被初始化的具体答案。这是有问题的初始化列表: 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:在构造函数中Triangle::Triangle(Vector, Vector, Vector, Point)
Triangle.h:11:警告:警告:基地Shape
三角Triangle::b会后
Triangle.cc:9进行初始化。 cc:9:警告:此处初始化时

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

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

+0

我还应该注意,类Shape是抽象的,所以我不能把它放在大括号内。 – user2950936

+3

基本类总是在成员之前初始化,完全停止。 – Brian

+1

“我需要a和b在调用Shape之前显式初始化,以便将正确的值返回到RectilinearAnimationStrategy。”你必须找到一种不需要的方法。 –

回答

3

我明白初始化的形状取决于函数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) {} 
+0

实现,它的显而易见的美丽haha brb – user2950936

+0

如果'RectilinearAnimationStrategy'正在引用或不。我敢打赌这是 –

+0

在特定的声明中引用参考? – user2950936