2010-01-31 55 views
0

我创建了一个类,它编译时没有语法错误,但是我得到6个未解析的外部符号?获取未解析的外部错误

类:

struct CELL { 
private: 
    static bool haslife; 
static int x; 
static int y; 
public: 

    static bool has_life() 
    { 
     return haslife; 
    } 

    static void set_coords(int xcoord, int ycoord) 
    { 
     x = xcoord; 
     y = ycoord; 
    } 
    static void get_coords(int &xcoord, int &ycoord) 
    { 
     xcoord = x; 
     ycoord = y; 
    } 


}; 


class cell_grid { 
private: 
static int cell_size; 
static int cell_count_x; 
static int cell_count_y; 
CELL **cell; 
public: 
    cell_grid(); 
    cell_grid(unsigned int width,unsigned int height, unsigned int cellsize) 
    { 

     //set size based on cellsize 

     this->cell_size = cellsize; 
     this->cell_count_x = floor((double)width/this->cell_size); 
     this->cell_count_y = floor((double)height/this->cell_size); 


     this->cell = new CELL*[this->cell_count_y]; 

     for(int i = 0; i < this->cell_count_y; i++) 
     { 
      cell[i] = new CELL[this->cell_count_x]; 
     } 

     for(int y = 0; y < this->cell_count_y; ++y) 
     { 
      for(int x = 0; x < this->cell_count_x; ++x) 
      { 
       int cur_x = x * this->cell_size; 
       int cur_y = y * this->cell_size; 
       this->cell[x][y].set_coords(cur_x,cur_y); 
      } 
     } 

    } //end of constructor 

    static int get_cell_size() 
    { 
     return cell_size; 
    } 
static void render(BITMAP *buff) 
{ 
    circlefill(buff,70,70,60,makecol(27,37,0)); 

} 


}; 

主要

int main() 
{ 
    start_allegro(); 
    cell_grid *grid = new cell_grid(scr_w,scr_h,10); 
    grid->render(buffer); 


     //Main Loop 
    while (!done && !key[KEY_ESC]) //until 'X' pressed or ESC 
{ 
//***** Start Main Code Here ***** 
    while (speed_counter > 0) 
    { 



       //render the buffer to the screen 

      blit(
      buffer, 
      screen, 
      0,0,0,0, 
      scr_w, 
      scr_h); 

      clear_bitmap(buffer); 

     speed_counter --; 
    } 
//***** End Main Code Here ***** 
rest(1); //Normalize cpu usage 
} 
    return 0; 
} 
END_OF_MAIN() 

感谢

+0

什么是无法解决的符号? – 2010-01-31 16:02:45

回答

4

并没有规定所有的类变量的静态。
将数据成员定义为静态时,意味着它只有一个单一实例。这似乎不是你想要在这里做的。
而不是

private: 
    static bool haslife; 
    static int x; 
    static int y; 

写:

private: 
    bool haslife; 
    int x; 
    int y; 

更进一步,当你定义一个静态成员,您需要在CPP文件中再次定义,并用一个值初始化。它看起来不像你这样做,这就是为什么你得到链接器错误。

另外,下次您发布内容时,请确保您实际提出问题,而不仅仅是陈述事实。

+0

好点,看起来不像是静态的。 – 2010-01-31 16:06:28

+0

是的。缺省的cell_grid构造函数也缺失。 – 2010-01-31 16:08:37

+0

谢谢,我让所有东西都是静态的,因为在过去,我的编译器在困扰着我时,如果他们愿意,但是当你创建类实例时,它是不必要的。 – jmasterx 2010-01-31 16:26:46

相关问题