1

私は次のものを持っています:

class foo {
private:
  bar * x[];
public:
  foo(bar * x[]);
};

foo::foo(bar * x[]) {
  this->x = x;
}

私が理解している限りでは、配列の最初の要素 (フィールドとパラメーターの両方)xへのポインターへのポインターです。ただし、このコードは機能しないため、間違っているに違いありません。次のエラーが表示されます。barxx

In constructor 'foo::foo(bar**)': error: incompatible types in assignment of 'bar**' to 'bar* [0]'

この問題を解決するにはどうすればよいですか? 私は何を正しく理解していませんか?

注: ご想像のとおり、bar はクラスであり、プリミティブ型のプレースホルダーではありません。

編集:

私の目標は、プログラムの他の場所でこれを行うことです。

bar a[2];
bar b0 = bar(), b1 = bar();
a[0] = &b0;
a[1] = &b1;
bar * x[] = &a;
foo f = foo(x);

どうすればそれを達成できますか?また、 は とbar * x[] = &a;同等bar ** x = &a&aはありませ&(&a[0])ん。ここで何が理解できませんか?

4

1 に答える 1

3
bar * x[];

xポインターの配列ですbar(配列サイズを宣言しなかった理由はわかりません)。

例えば、

int a[] = { 11, 22, 33 };
int b[3];

b = a;  // Error

あるアレイを別のアレイに割り当てることはできません。個々の配列要素をプログラムで他の要素にコピーする必要があります。これを行うには、ソース配列と宛先配列のサイズが必要です。

于 2013-05-17T05:30:22.857 に答える