1

関数内の配列へのポインターを渡す方法を知りたいのですが、関数内ではまだそれをポインターとして使用したいと考えています。

process(Shape **sp);

int main(){
  Shape* objShape[5];
  process(objShape);
}

process(Shape **sp) {
  sp[0]=&objRec; // No Errors
  cout<<sp[0]->computeArea(); // WORKS
}

しかし、COMPUTEAREA() メソッドを別の関数に変更すると、機能しません

getArea(Shape **sp){
  cout<<sp[0]->computeArea(); // I get a segmentation fault error;
}

objRec は Shape クラスの子クラスです。そして、計算領域を評価するために動的バインディングを使用する必要があります。

4

5 に答える 5

1

シンプルに、このように

sp[0]=objRec;

あなたはすべての指針と混同していました。オブジェクトの配列へのポインターがあります。しかし、あなたのコードは、オブジェクトへのポインタの配列へのポインタがあるかのように書かれており、まったく同じではありません。

2 番目のコードにはポインタの配列があるため、2 番目のコードがコンパイルされます。

クリスが指摘しているように、const.

于 2012-10-21T17:59:44.223 に答える
1
process(Shape const *sp){
    sp[0]=&objRec;
}

を使用しconstました。だからうまくいかなかった。を削除してみてくださいconstconstタイプの値を変更することはできません。

さらに、objRect のアドレスを割り当てています。これを試して:

process(Shape const *sp){
    sp[0]=objRec;
}
于 2012-10-21T18:07:15.563 に答える
1

const署名から削除:

process(Shape *sp)

objRec がタイプの場合Shape、そこからポインターを取得しないでください。

process(Shape *sp){

  sp[0]=objRec; 
}
于 2012-10-21T18:07:27.247 に答える
0

objRec 型を取得=する際に演算子をオーバーロードしていませんshape class

objRecTYPE& operator=(objRecTYPE& s)
{
    // your code

    return *this;
}
于 2012-10-21T18:05:58.127 に答える
0

sp[0] の値を objRec のアドレスに割り当てようとしています。アドレス演算子を除外してみてください。

于 2012-10-21T18:07:08.500 に答える