Undeclared id error where none seems obvious

I am trying to implement a simple Conway Game of Life version that consists of a header file and three .cpp files (two for the class functions, one for the main one). Here I have included the header files and two class function declaration files (the compiler has no problem with my Main.cpp file).

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; 
}

      

As I understand it, since I have included a header file with class declarations, then I must be able to access the private members of the class through the previously declared functions in the class.

Essentially, the bug report looks like

Error C2065 'item' : undeclared identifier

      

This error appears for every private member called from the cell class .

What am I doing wrong?

+3


source to share


2 answers


I can't see the word item

anywhere in your code. However, you need to fix:

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

      



It should be:

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

      

+1


source


Also, in yours Cell_Array_Class_Functions.cpp

you need to customize your functions.

The operator is .

used for objects and references. You must read it first to get the link. I.e:

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



Alternatively, you can use (this is the preferred and easier reading way):

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

Both are equivalent.

+2


source







All Articles