2013-12-21 249 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

当你用'a2'初始化'a2'时,'a'中的所有指针都是未初始化的。 – chris

+0

你 格式化 / 压痕 可以 使用 一些 工作。 –

回答

1

您分配的size数量为A* s,但实际上并没有将这些指针指向任何地方。 它们未初始化。编辑:现在你只是将它们设置为NULL。您需要分配一些A对象并将其地址分配给a的每个元素。不过,我认为没有理由让你动态地分配指针数组 - 为什么你不声明aA* a[10];? (或更好的,使用std::vectorstd::array

+0

我使用动态分配,因为phone_number,我无法达到它没有动态分配! –

+2

@RaiOu它看起来更像是你使用动态分配,因为你不知道如何使用标准库容器。 – juanchopanza

+2

只是一个方面的评论:他从来没有释放他的'A'对象。分配对象时这是一个问题,很容易忘记释放它们。 –