未声明的标识符错误,其中似乎没有明显的错误

时间:2015-09-24 04:34:40

标签: c++ class conways-game-of-life undeclared-identifier

我正在尝试实现一个简单版本的Conway的生命游戏,其中包含一个头文件和三个.cpp文件(两个用于类函数,一个用于main)。这里我包含了我的头文件和两个类函数声明文件(编译器对我的Main.cpp文件没有任何问题)。

Game_Of_Life.h

#include <iostream>
#include <cstdlib>
#include <time.h>

using namespace std; 

class cell{
    public:
        cell(); 
        int Current_State();                        // Returns state (1 or 0)
        void Count_Neighbours(cell* A);             // Counts the number of living cells in proximity w/o wraparound
        void Set_Future();                          // Determines the future value of state from # of neighbbours
        void Update();                              // Sets state to value of future state
        void Set_Pos(unsigned int x, unsigned int y);   // Sets position of cell in the array for use in counting neighbours 
    private:
        int state; 
        int neighbours; 
        int future_state; 
        int pos_x; 
        int pos_y; 
}; 

class cell_array{
    public:
        cell_array();                                   
        void Print_Array();                             // Prints out the array
        void Update_Array();                            // Updates the entire array
        void Set_Future_Array();                        // Sets the value of the future array
    private:
        cell** A; 
}; 

Cell_Class_Functions.cpp

#include "Game_Of_Life.h"

cell::cell(){
    state = rand() % 2; 
    return; 
}

void cell::Set_Future (){
    if (state == 1){
        if (neighbours < 2) future_state = 0; 
        else if (neighbours == 2 || neighbours == 3) future_state = 1; 
        else if (neighbours > 3) future_state = 0; 
    }
    else{
        if (neighbours == 3) future_state = 1; 
    }
    return; 
}

void cell::Update (){
    state = future_state; 
    return; 
}

int cell::Current_State (){
    return state; 
}

void cell::Set_Pos (unsigned int x, unsigned int y){
    pos_x = x; 
    pos_y = y; 
    return; 
}

void Count_Neighbours (cell* A){
    neighbours = 0; 
    if (pos_x > 0) neighbours += A[pos_y * 10 + pos_x - 1].Current_State(); 
    if (pos_x < 9) neighbours += A[pos_y * 10 + pos_x + 1].Current_State(); 
    if (pos_y > 0) neighbours += A[(pos_y - 1) * 10 + pos_x].Current_State(); 
    if (pos_y < 9) neighbours += A[(pos_y + 1) * 10 + pos_x].Current_State(); 
    if (pos_x > 0 && pos_y > 0) neighbours += A[(pos_y - 1) * 10 + pos_x - 1].Current_State(); 
    if (pos_x > 0 && pos_y < 9) neighbours += A[(pos_y + 1) * 10 + pos_x - 1].Current_State(); 
    if (pos_x < 9 && pos_y > 0) neighbours += A[(pos_y - 1) * 10 + pos_x + 1].Current_State(); 
    if (pos_x < 9 && pos_y < 9) neighbours += A[(pos_y + 1) * 10 + pos_x + 1].Current_State(); 
    return; 
}

Cell_Array_Class_Functions.cpp

#include "Game_Of_Life.h"

cell_array::cell_array(){
    A = (cell**) malloc (sizeof(cell*)*100); 
    for (unsigned int r = 0; r < 10; r++){
        for (unsigned int c = 0; c < 10; c++){
            *A[r * 10 + c].Set_Pos(r,c); 
        }
    }
    return; 
}

void cell_array::Update_Array(){
    for (unsigned int r = 0; r < 10; r++){
        for (unsigned int c = 0; c < 10; c++){
            *A[r * 10 + c].Update(); 
        }
    }
}

void cell_array::Set_Future_Array(){
    for (unsigned int r = 0; r < 10; r++){
        for (unsigned int c = 0; c < 10; c++){
            *A[r * 10 + c].Count_Neighbours(A);
            *A[r * 10 + c].Set_Future(); 
        }
    }
    return; 
}

void cell_array::Print_Array(){
    cout << "\n"; 
    for (unsigned int r = 0; r < 10; r++){
        for (unsigned int c = 0; c < 10; c++)cout << *A[r * 10 + c].Current_State() << " "; 
        cout << "\n"; 
    }
    return; 
}

据我所知,由于我将头文件包含在类声明中,因此我应该能够通过类中先前声明的函数来访问类的私有成员。

基本上错误报告看起来像

Error C2065 'item' : undeclared identifier

单元格类调用的每个私有成员都会显示此错误。

我做错了什么?

2 个答案:

答案 0 :(得分:2)

此外,在Cell_Array_Class_Functions.cpp中,您需要调整功能。

.运算符用于对象和引用。您必须首先使用它来获取引用。那就是:

(*A[r * 10 + c]).Set_Pos(r,c);

或者,您可以使用(这是首选且更易于阅读的方式):

A[r * 10 + c]->Set_Pos(r,c);

这两者是等价的。

答案 1 :(得分:1)

我在代码中的任何位置都没有看到item这个词。但是,您需要修复:

void Count_Neighbours (cell* A){ ... }

应该是:

void cell::Count_Neighbours (cell* A){ ... }