今年夏天,我一直在写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文件中,因此应在其中包括前向声明类的标头。根本不需要标题的唯一情况是,您仅传递指向前向声明的类的对象的指针,而没有实际访问指向的对象。

09-09 23:44