4

これを機能させるのに問題があります。

class A {
public:
    A(int n) {
        a = n;
    }
    int getA() {
        return a;
    }
private:
    int a;
};

int main(){

    A* a[3];
    A* b[3];

    for (int i = 0; i < 3; ++i) {
        a[i] = new A(i + 1);
    }

    void * pointer = a;

    b = (A* [])pointer;  // DOESNT WORK Apparently ISO C++ forbids casting to an array type ‘A* []’.
    b = static_cast<A*[]>(pointer); // DOESN'T WORK invalid static_cast from type ‘void*’ to type ‘A* []’

    return 0;
}

そして、必要なものにジェネリック型を使用できません。

前もって感謝します。

4

2 に答える 2

10

配列は、C (したがって C++) では二流市民です。たとえば、それらを割り当てることはできません。そして、最初の要素へのポインターに分解せずにそれらを関数に渡すことは困難です。
配列の最初の要素へのポインタは、ほとんどの目的で配列と同様に使用できますが、配列のサイズを取得するために使用することはできません。

あなたが書くとき

void * pointer = a;

aは最初の要素へのポインタに暗黙的に変換され、次に にキャストされvoid*ます。

それから、配列を戻すことはできませんが、最初の要素へのポインターを取得できます。

A* b = static_cast<A*>(pointer);

(注: 関連のない型へのポインター間のキャストには が必要reinterpret_castです。ただし、 を使用して実行できるvoid*暗黙的なキャスト へのキャストとvoid*、 を使用して実行できる他のポインターへのキャストは除きますstatic_cast。)

于 2010-10-12T17:14:23.400 に答える
9

おそらくあなたはするつもりです

memcpy(b, (A**)pointer, sizeof b);

static_castバージョンも可能です。

于 2010-10-12T17:36:00.817 に答える