我正在尝试创建一个包含指向类的指针的数组。 数组的大小将由键盘提供,因此我尝试使用以下方式创建数组:
class creature
{
protected:
string crt_name ;
int L ;
public:
creature( int Life = -1 , string Name = "")
: L(Life) , crt_name(Name){}
string get_crt_name ( void )
{
return crt_name ;
}
};
class creature_society
{
private:
creature* *A ;
int noc ;
public:
creature_society( int , int ) ;
~creature_society() ;
creature** get_A ( void ){return A ;}
};
生物社会的构造者将用随机生物填充阵列
creature_society::creature_society( int life , int number_of_creatures )
{
noc = number_of_creatures ;
A = new creature*[noc] ;
creature* temporary ;
for( int i = 0 ; i<= number_of_creatures -1 ; i++)
{
if ( rand()%100 <= 50)
{
temporary = new good_creature( life , get_unique_name( 3 ) );
A[i] = temporary ;
}
else
{
temporary = new bad_creature( life , get_unique_name( 3 ) );
A[i] = temporary ;
}
}
}
然后我尝试打印数组
cout << endl << "Printing Society:" << endl ;
for ( j = 0 ; j <= N -1 ; j++)
{
temp = (*( cs1.get_A() + j ))->get_crt_name() ;
}
问题是当我在linux上运行时遇到分段错误,而在Dev C ++上工作正常(大部分时间)! 你指出的任何错误?
答案 0 :(得分:0)
我认为你可以做到,
for (int j=0 ; j < N; ++j)
{
temp = cs1.get_A()[j]->get_crt_name();
}
答案 1 :(得分:0)
您在此处未提及bad_creature
和good_creature
的类别。
我假设他们将生物作为基类继承,因此你应该将get_crt_name
定义为虚函数。
您的get_unique_name
功能可能也出现了问题。
我在VC2015中执行了您的代码并且没有发现任何错误(我用good creature
替换了课程bad creature
和creature
类,并用const字符串替换了get_unique_name
。
请:
1.检查核心转储程序崩溃的位置。 2.在分段故障之前它发出了什么输出。
将来,类名应始终以大写字母开头,因为它是一种非常常见的样式约定。