私は今年の夏に NES エミュレーターを書いていて、障害に遭遇しました。ppu コードをテストしようとしていますが、循環依存が原因でコードをコンパイルできません。
私が現在持っているもの:
- 3 つのクラス: 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" は次のエラーを出力します (インクルードなしでは発生しません):
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
ここから何をすべきかについて何か提案はありますか?私は困惑しています。