今年夏天,我一直在写NES模拟器,但遇到了障碍。我正在尝试测试我的ppu代码,但是由于循环依赖,我无法编译我的代码。
我目前所拥有的:
三类:cpu,ppu和内存
标头:cpu.h,ppu.h和memory.h
cpp文件:cpu.cpp,ppu.cpp,memory.cpp和main.cpp
依赖性问题在memory.h中。当前,ppu.h包含memory.h,以便我可以访问VRAM,memory.h包含ppu.h,以便我可以根据cpu写入内存的内容来更新VRAM中的标志或地址。由于我仅使用ppu指针,因此尝试了ppu类的前向声明,但这失败了。
这是我的带有向前声明的代码示例的结果:
case 0x2000:
ppu->ppuTempAddress |= ((data & 0x03) << 10);
break;
错误:
In file included from memory.cpp:1:0:
memory.h:7:7: error: forward declaration of ‘class ppu’
memory.cpp:99:10: error: invalid use of incomplete type ‘class ppu’
include“ ppu.h”输出此错误(没有include不会发生):
In file included from memory.h:6:0,
from memory.cpp:1:
ppu.h:13:20: error: ‘memory’ has not been declared
ppu.h:63:25: error: ‘memory’ has not been declared
ppu.h:66:29: error: ‘memory’ has not been declared
关于从这里做什么的任何建议?我很困惑
最佳答案
您应该将ppu.h包括在memory.cpp中(在memory.h之后),而不是在memory.h内部,因为memory.h仅需要前向声明,并且错误在memory.cpp中发生
前向声明只能用于声明指针和引用,但要实际使用这些引用,则需要完整的类定义。由于用法仅应出现在.cpp文件中,因此应在其中包括前向声明类的标头。根本不需要标题的唯一情况是,您仅传递指向前向声明的类的对象的指针,而没有实际访问指向的对象。