2017-02-13 78 views
-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; 
} 
+0

观看您放置星号,你应该返回一个指向'Shape'(即'形状*')。 –

+0

一旦你获得了构建代码,你就会遇到一个非常糟糕的问题,就像你在'O'构造函数存储指针指向局部变量一样。一旦构造函数返回,参数将超出范围并消失,留下指针指向不存在的数据。 *为什么*你在使用指针?在工厂函数'makeShape'中返回的'O'构造函数(对我来说似乎也是一个坏名字)? –

+0

您对编译错误的分析是正确的,并且是绝对正确的。这里期望的返回值是一个指向名为'Shape'的类的成员的指针,其类型也是'Shape'。这是一个合乎逻辑的谬误,因为一个班级不能包含自己。如果可能的话,整个宇宙将被吞噬到一个超大质量的黑洞中,以每个粒子的光子速度产生次原子爆炸。 –

回答

1
​​

你似乎混淆了你的返回类型和你的函数的名称。

你的意思大概是

static Shape *Shape::makeShape(...) 
+0

谢谢。我认为这工作! –