c++友类无效使用不完整的OOP类型
C++ friend class invalid use of incomplete type OOP
我决定学习一些OOP,我开始摆脱条件(我知道在这个程序中这是不必要的,但我必须从简单的例子开始)。
在DirectConditions
类中,我有自己的条件,参照友类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
你应该避免包括头彼此-这就是为什么你得到"无效使用不完整类型"。更改这些包括转发声明和将方法的实现移动到cpp文件。
相关文章:
- ArduinoJson 6.15.2:JsonObject没有命名类型
- 防止主数据类型C++的隐式转换
- 大量序列中核苷酸类型的快速计数
- 如何从C++中的依赖类型中获得它所依赖的类型
- 有关插入适配器的错误。[错误]请求从 'back_insert_iterator<vector<>>' 类型转换为非标量类型
- 是否可以初始化不可复制类型的成员变量(或基类)
- 如何获取std::result_of函数的返回类型
- 从父命名空间重载类型
- 如果C++类在类方法中具有动态分配,但没有构造函数/析构函数或任何非静态成员,那么它仍然是POD类型吗
- 我想将一个对T类型的非常量左值引用绑定到一个T类型的临时值
- Openssl 1.1.1d无效使用不完整的类型"struct dsa_st"
- 返回类型在 C++ OOP 中是什么意思
- 函数与返回类型 node* 与 C++ 中的 OOP 结合使用
- OOP - 抽象类类型,初始化基类和派生类中的变量
- 使用两种或两种以上数据类型的对象作为c++映射、OOP的关键字
- 如何在OOP C 中使用const类型类
- 不能将 "const char *" 类型的值分配给类型 "char" C OOP 的实体
- c++友类无效使用不完整的OOP类型
- OOP-这是重写类成员变量类型的好方法吗
- 运算符 << 不匹配(操作数类型 std::ostream) C++ OOP 和点