gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 21:17:27 30 4
gpt4 key购买 nike

我正在尝试实现一个简单版本的 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;
}

据我了解,既然我在类声明中包含了头文件,那么我应该能够通过类中先前声明的函数访问类的私有(private)成员。

基本上错误报告看起来像

Error C2065 'item' : undeclared identifier

cell 类调用的每个私有(private)成员都会出现此错误。

我做错了什么?

最佳答案

另外,在您的 Cell_Array_Class_Functions.cpp 中,您需要调整您的函数。

. 运算符用于对象和引用。您必须先对它进行推导才能获得引用。即:

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

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

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

两者是等价的

关于c++ - 未声明的标识符错误,其中似乎没有明显,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32753424/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com