我想初始化一个数组。没有编译错误,但是当我运行程序时,它显示第一个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 :(得分:1)
您分配size
个A*
个,但实际上并没有让这些指针指向任何位置。 他们没有初始化。编辑:现在你只是将它们设置为NULL。您需要分配一些A
个对象,并将其地址分配给a
的每个元素。但是,我认为你没有充分的理由动态分配指针数组 - 为什么不把a
声明为A* a[10];
? (或者更好的是,使用std::vector
或std::array
)