-1
问题是静态函数期望返回类型为Shape Shape::*
?并得到一个只是Shape*
。无法使用类型为'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'(即'形状*')。 –
一旦你获得了构建代码,你就会遇到一个非常糟糕的问题,就像你在'O'构造函数存储指针指向局部变量一样。一旦构造函数返回,参数将超出范围并消失,留下指针指向不存在的数据。 *为什么*你在使用指针?在工厂函数'makeShape'中返回的'O'构造函数(对我来说似乎也是一个坏名字)? –
您对编译错误的分析是正确的,并且是绝对正确的。这里期望的返回值是一个指向名为'Shape'的类的成员的指针,其类型也是'Shape'。这是一个合乎逻辑的谬误,因为一个班级不能包含自己。如果可能的话,整个宇宙将被吞噬到一个超大质量的黑洞中,以每个粒子的光子速度产生次原子爆炸。 –