创建指向类

时间:2015-12-30 13:36:23

标签: c++ arrays class pointers segmentation-fault

我正在尝试创建一个包含指向类的指针的数组。 数组的大小将由键盘提供,因此我尝试使用以下方式创建数组:

 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 ++上工作正常(大部分时间)! 你指出的任何错误?

2 个答案:

答案 0 :(得分:0)

我认为你可以做到,

for (int j=0 ; j < N; ++j)
{
   temp = cs1.get_A()[j]->get_crt_name();
}

答案 1 :(得分:0)

您在此处未提及bad_creaturegood_creature的类别。 我假设他们将生物作为基类继承,因此你应该将get_crt_name定义为虚函数。

您的get_unique_name功能可能也出现了问题。 我在VC2015中执行了您的代码并且没有发现任何错误(我用good creature替换了课程bad creaturecreature类,并用const字符串替换了get_unique_name

请:

1.检查核心转储程序崩溃的位置。 2.在分段故障之前它发出了什么输出。

将来,类名应始终以大写字母开头,因为它是一种非常常见的样式约定。