0

配列を初期化したい。コンパイル エラーはありませんが、プログラムを実行すると最初にエラーが表示され、実行がcout停止します。

これが私のコードです:

class A {
    string first_name ;
    string last_name;
    int ID;
public:
    virtual void print ()=0;
};

class B :public A{
    string phone_number;

    .......
    void print(){
        ........
    }
};

class D{
    A** a;
    int size;
public:
    D(){
        size = 10;
        a = new A *[size];
        for(int i = 0 ; i<size ; i++){
            a[i] = NULL;
        }
    }

    void Add(){
        for(int i = 0 ; i<size ; i++){
            A * a2 = a[i];
            B * b  = dynamic_cast<B*>(a2);
            int id;
            cout<<"enter the id";
            cin>>id
            b->set_ID(id);
            // i did the same (cout , cin statements) for the first name and last name.
            b->set_first_name();
            b->last_name();
        }
};

これは正しくありませんか?

4

1 に答える 1

1

sizes の量を割り当てA*ますが、実際にはそれらのポインターがどこを指すようにもしません。それらは初期化されていません。編集:今はNULLに設定しています。Aいくつかのオブジェクトを割り当て、それらのアドレスを の各要素に割り当てる必要がありaます。ただし、ポインターの配列を動的に割り当てる正当な理由はないと思います。 aas として宣言してみませんA* a[10];か? (またはさらに良いことに、std::vectorまたはを使用しますstd::array

于 2013-12-21T14:01:19.293 に答える