-1
静的関数は戻り値のタイプがShape Shape::*
であると予想していますか?ちょうどShape*
の1つを取得しています。タイプ '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'です。クラスはそれ自身を含むことができないので、それは論理的な誤りです。そうすることができれば、宇宙全体がスーパーマスブラックホールに呑み込まれ、結果としてあらゆる粒子の亜原子爆発が光のスピードで起こります。 –