类之间的 TypeDef 错误C++
TypeDef error between classes C++
我是一个相当新的程序员,所以我可能没有正确理解typedef。
我有 2 个职业敌人.cpp和 AI.cpp。 我的AI.cpp需要来自敌人的值.cpp以便能够处理其移动等。 在AI中.cpp我持有指向位置,速度和敌人面对方向的枚举等值的指针。
下面列出了我收到的错误。如果有更简单的方法可以在类之间链接枚举变量,请 im all ears。
下面是该错误的工作示例。
///////MAIN.H/////////////
#ifndef _MAIN_H_
#define _MAIN_H_
#endif // ! _MAIN_H_
///////////////////////////
////////MAIN.CPP///////////
#include "AI.h"
#include "Enemy.h"
int main(int argc, char* args[])
{
Enemy enemy;
}
//////////////////////////////
//////////ENEMY.H///////////////
#ifndef _ENEMY_H_
#define _ENEMY_H_
#include "AI.h"
class Enemy
{
public:
Enemy();
enum Facing
{
LEFT = 0,
RIGHT
};
protected:
AI* EnemiesAI;
//try this as a pointer
Facing EnemyDirection;
};
#endif
//////////////////////////////////
///////////ENEMY.CPP////////////////
#include "Enemy.h"
Enemy::Enemy()
{
EnemiesAI = new AI;
EnemiesAI->LinkEnemyToAI(&EnemyDirection);
}
////////////////////////////////////
/////////////////AI.H//////////////
#ifndef _AI_H_
#define _AI_H_
#include "Enemy.h"
class AI
{
public:
/*this needs to be a pointer, otherwise I have to pass the
value into AI on every update*/
typedef Enemy::Facing *ThisFacing; //Error 3
void LinkEnemyToAI(ThisFacing facing);
private:
//This is a pointer to a Enemy::Facing object
ThisFacing mFacing;
};
#endif
///////////////////////////////////////
////////////////AI.CPP/////////////////
#include "AI.h"
void AI::LinkEnemyToAI(ThisFacing facing)
{
mFacing = facing;
}
////////////////////////////////////////
错误 C2653 "Enemy": 不是类或命名空间名称 示例类型定义错误 c:\dev\projects\exampleoftypedeferror\exampleoftypedeferror\ai.h 11
严重性代码描述项目文件行 错误 C4430 缺少类型说明符 - 假定为 int。注意:C++不支持 default-int ExampleOfTypeDefError c:\dev\projects\exampleoftypedeferror\exampleoftypedeferror\ai.h 11
严重性代码描述项目文件行 错误 C3646 'mFacing': 未知覆盖说明符 示例类型定义错误 c:\dev\projects\exampleoftypedeferror\exampleoftypedeferror\ai.h 17
严重性代码描述项目文件行 错误 C4430 缺少类型说明符 - 假定为 int。注意:C++不支持 default-int ExampleOfTypeDefError c:\dev\projects\exampleoftypedeferror\exampleoftypedeferror\ai.h 17
严重性代码描述项目文件行 错误 C2660 'AI::LinkEnemyToAI':函数不采用 1 个参数 示例类型定义错误 c:\dev\projects\exampleoftypedeferror\exampleoftypedeferror\enemy.cpp 7
严重性代码描述项目文件行 错误 C2061 语法错误: 标识符"此面向" 示例类型定义错误 c:\dev\projects\exampleoftypedeferror\exampleoftypedeferror\ai.h 13
严重性代码描述项目文件行 错误 C2238 ";"前面出现意外标记 ExampleOfTypeDefError c:\dev\projects\exampleoftypedeferror\exampleoftypedeferror\enemy.h 23
在这里使用包含保护实际上没有帮助,因为Enemy.h
取决于AI.h
,这取决于Enemy.h
等等。
你必须打破这个链条,而打破它的最简单的方法是通过一种叫做前向声明的东西。
如果你仔细观察Enemy.h
头文件,它对AI
类的所有用途都是声明一个成员变量,它是一个指向AI
的指针。这意味着你不需要AI
的完整定义,你只需要告诉编译器类AI
存在。类似的东西
#ifndef ENEMY_H
#define ENEMY_H
class AI; // Forward declaration of the AI class
class Enemy
{
public:
Enemy();
enum Facing
{
LEFT = 0,
RIGHT
};
protected:
AI* EnemiesAI;
//try this as a pointer
Facing EnemyDirection;
};
#endif // ENEMY_H
现在在Enemy.cpp
文件中,您仍然需要#include "AI.h"
,因为那里需要类的完整定义。
这种前向声明在AI.h
头文件中实际上是不可能的,因为在其中使用枚举Enemy::Facing
。但是,由于Enemy.h
不再包含AI.h
因此不再存在循环依赖项。
另请注意,我将标头保护宏更改为没有前导下划线,因为所有带有大写字母的前导下划线后跟符的符号都在所有范围内保留。例如,请参阅此问题及其答案以获取更多详细信息。
- 警告处理为错误这里有什么问题
- "error: no matching function for call to"构造函数错误
- boost::进程间消息队列引发错误
- C++,OpenCV,尝试显示图像时"OpenCV(4.3.0) Error: Assertion failed (size.width>0 && size.height>0)"此错误
- 有关插入适配器的错误。[错误]请求从 'back_insert_iterator<vector<>>' 类型转换为非标量类型
- QT在错误的班级中寻找空位
- vector.resize()中的分配错误
- 代码在main()中运行,但在函数中出现错误
- 释放错误后堆使用
- (C++)分析树以计算返回错误值的简单算术表达式
- Project Euler问题4的错误解决方案
- 我的字符计数代码计算错误.为什么
- 从"int*"强制转换为"unsigned int"会丢失精度错误
- 尝试导入pybind-opencv模块时出现libgtk错误
- CMake项目Boost库错误:Boost/config/compiler/gcc.hpp:165:10:致命错误:cs
- 在某些循环内使用vector.push_back时出现分段错误
- MSVC多行宏编译器错误
- 静态数据成员的问题-修复链接错误会导致编译器错误
- 为什么在运行时没有向我们提供有关分段错误的更多信息?
- 错误:未在此范围内声明'reverse'