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

は、あなたがそのアスタリスクを置くウォッチは、あなたが 'Shape'(すなわち'シェイプ* ')へのポインタを返すことになっていると考えられます。 –

+0

'O'コンストラクタにローカル変数へのポインタを格納するので、ビルドするコードを取得すると、はるかに悪い問題があります。引数は範囲外になり、コンストラクタ関数が返ったら消えて、存在しないデータへのポインタが残されます。 *なぜあなたはポインタを使用していますか?ファクトリ関数 'makeShape'から返ってくる' O'コンストラクタ(私にとっても悪い名前のようです)にありますか? –

+0

コンパイルエラーの分析は、お金の上に正しいですし、絶対に正しいです。ここで期待される戻り値は、 'Shape'と呼ばれるクラスのメンバへのポインタであり、型も' Shape'です。クラスはそれ自身を含むことができないので、それは論理的な誤りです。そうすることができれば、宇宙全体がスーパーマスブラックホールに呑み込まれ、結果としてあらゆる粒子の亜原子爆発が光のスピードで起こります。 –

答えて

1
​​

あなたの戻り値の型とあなたの関数の名前を混同しているように見えます。あなたは何を意味するのか

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

ありがとうございます。私はそれが働いたと思う! –

関連する問題