gpt4 book ai didi

C++ friend 类无效使用不完整类型 OOP

转载 作者:行者123 更新时间:2023-11-28 05:30:37 25 4
gpt4 key购买 nike

我决定学习一些 OOP,并开始摆脱条件(我知道在这个程序中这是不必要的,但我必须从简单的例子开始)。

DirectConditions 类中,我有自己的条件,我将通过引用 friend 类 DirectConditions 的方法传递 SnakeGame 的对象并更改DirectConditions 方法中 SnakeGame 的一些变量的值。

错误:

invalid use of incomplite type 'class DirectConditions::SnakeGame' snakeObj.snake[0].xCoor+=1;

另一个问题:

我想借此机会问一句:这种摆脱条件(if's)的方式好吗?我真的很感激帮助。

提供代码:

snakeGame.hpp:

#ifndef _SNAKEGAME_HPP
#define _SNAKEGAME_HPP
#include<string>
#include"directConditions.hpp"
#include<map>

class SnakeGame{
public:
SnakeGame();
void mainLogic();
void check();

friend class DirectConditions;

private:
const int width,height;
int sizeOfSnake;
std::string direction;
std::map<std::string,DirectConditions*> directMap;


struct Snake{ int xCoor,yCoor; }snake[100];
enum Directions{up,down,left,right} directEnum;
void initializeMap();
};
SnakeGame::SnakeGame():width(500),height(500),sizeOfSnake(3){}

void SnakeGame::check(){
for(int i=sizeOfSnake;i>0;--i){
snake[i].xCoor=snake[i-1].xCoor;
snake[i].yCoor=snake[i-1].yCoor;
}
directMap[direction].goToDirection(this);
}
//private fun
void SnakeGame::initializeMap(){
directMap["right"]=new GoRight;
directMap["left"]=new GoLeft;
directMap["up"]=new GoUp;
directMap["down"]=new GoDown;
}


#endif

directConditions.hpp:

#ifndef _DIRECTCONDITIONALS_HPP
#define _DIRECTCONDITIONALS_HPP
#include"snakeGame.hpp"

class DirectConditions{
public:
class SnakeGame;
virtual void goToDirection(SnakeGame&)=0;
virtual ~DirectConditions(){};
};

class GoRight:public DirectConditions{
public:
void goToDirection(SnakeGame& snakeObj){
snakeObj.snake[0].xCoor+=1;
}
};

class GoLeft:public DirectConditions{
public:
void goToDirection(SnakeGame& snakeObj){
snakeObj.snake[0].xCoor-=1;
}
};

class GoUp:public DirectConditions{
public:
void goToDirection(SnakeGame& snakeObj){
snakeObj.snake[0].yCoor+=1;
}
};

class GoDown:public DirectConditions{
public:
void goToDirection(SnakeGame& snakeObj){
snakeObj.snake[0].yCoor-=1;
}
};

#endif

最佳答案

您应该避免彼此包含 header - 这就是您得到“不完整类型的无效使用”的原因。更改那些包含以转发声明并将方法的实现移动到 cpp 文件。

关于C++ friend 类无效使用不完整类型 OOP,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39636364/

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