【发布时间】:2017-02-13 01:44:34
【问题描述】:
问题是静态函数期望返回类型为Shape Shape::* 吗?并且得到一个只是Shape*。
static Shape Shape::*makeShape(char ch,int posx,int posy){
Shape *rp = new O(posx, posy);
return rp;
}
O::O(int posx, int posy){
x = &posx;
y = &posy;
}
【问题讨论】:
-
注意你把星号放在哪里,你应该返回一个指向
Shape的指针(即Shape*)。 -
一旦获得要构建的代码,您就会遇到更糟糕的问题,因为您在
O构造函数中存储指向局部变量的指针。一旦构造函数返回,参数将超出范围并消失,留下指向不存在数据的指针。 为什么你使用指针?从工厂函数makeShape返回的O构造函数(对我来说似乎也是一个坏名字)? -
你对编译错误的分析是对的,绝对正确。这里的预期返回值是指向名为
Shape的类成员的指针,该成员的类型也是Shape。这是一个逻辑谬误,因为一个类不能包含它自己。如果有可能,整个宇宙将被吞入一个超大质量黑洞,导致每个粒子以光速发生亚原子爆炸。
标签: c++ pointers object inheritance