Необъявленная ошибка идентификатора, где ни один не кажется очевидным

Я пытаюсь реализовать простую версию игры жизни Конвея, которая состоит из файла заголовка и трех файлов .cpp (два для функций класса, один для основного). Здесь я включил мои файлы заголовков и два файла объявлений функций класса (у компилятора нет проблем с моим файлом 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

Эта ошибка появляется для каждого частного участника, вызванного из клетка учебный класс.

Что я делаю неправильно?

3

Решение

Я не вижу слова item в любом месте вашего кода. Тем не менее, вам нужно исправить:

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

Так должно быть:

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

Другие решения

Кроме того, в вашем Cell_Array_Class_Functions.cpp вам нужно настроить свои функции.

. Оператор используется на объектах и ​​ссылках. Сначала нужно отложить его, чтобы получить ссылку. То есть:

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

Кроме того, вы можете использовать (это предпочтительный и более удобный для чтения способ):

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

Два эквивалентны.

2

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector