2013-12-21 4 views
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(); 
     } 
}; 

이 정확하지 않은 :

여기 내 코드입니까?

+0

"입력 ID"를 인쇄하고 당신이 ID를 입력 한 후에 계속하지 않는다는 것을 의미합니까? –

+1

'a'의 모든 포인터는'a2'를 초기화 할 때 초기화되지 않습니다. – chris

+0

귀하의 / 들여 쓰기 일부 일 사용할 수있는 포맷. –

답변

1

size 금액을 A* 초로 할당하지만 실제로 포인터를 가리 키지는 않습니다. 초기화되지 않았습니다. 편집 : 이제 NULL로 설정하는 중입니다. 일부 A 오브젝트를 할당하고 각 주소를 a의 각 요소에 지정해야합니다. 그러나 포인터의 배열을 동적으로 할당해야하는 이유가 없습니다. aA* a[10];으로 선언하면 어떨까요? (또는 더 나은 아직은 std::vector 또는 std::array를 사용하십시오)

+0

phone_number 때문에 동적 할당을 사용합니다. 동적 할당없이 연결할 수 없습니다! –

+2

@RaiOu 표준 라이브러리 컨테이너를 사용하는 방법을 모르기 때문에 동적 할당을 사용하는 것처럼 보입니다. – juanchopanza

+2

그냥 한 발언 : 그는 결코 그의 'A' 개체를 할당 취소. 개체를 할당 할 때 문제가 생기면 할당을 잊어 버리는 것이 쉽습니다. –