Błąd kompilacji - "Does not name a type"

0

Siema.
Nie wiem czym to jest spowodowane, ale przy kompilacji dostaję coś takiego:

Przechwytywanie.PNG

CpuBus.hpp

#pragma once

#include "CPU6502.hpp"
#include "PPU.hpp"
#include "Cartridge.hpp"

#include <cstdint>
#include <cstring>

class CpuBus
{
	public:
		uint8_t* memory;
	
	private:
		CPU6502 cpu;
		PPU ppu;
		Cartridge cartridge;
	
	public:
		CpuBus(size_t size);
		~CpuBus();
		uint8_t* read(uint16_t address);
		void write(uint16_t address, uint8_t data);
		void clear_memory(size_t size);
};

PPU.hpp

#pragma once

#include "CpuBus.hpp"
#include "Byte.hpp"

class PPU
{ 
    public:
        CpuBus bus = CpuBus(16 * 1024);

        // Registers
        
        Byte ppu_ctrl;
        Byte ppu_mask;
        Byte ppu_status;
        Byte ppu_scroll;
        Byte ppu_addr;
        Byte ppu_data;

        Byte oam_addr;
        Byte oam_data;      
        Byte oam_dma;
    
    public:
        void clear_memory();
        void write_to_memory(uint16_t address, uint8_t data);
        uint8_t* read_from_memory(uint16_t address);
};

Nie wiem czy to jakiś problem z kolejnością include'ów?
Nie mam już pomysłów, będę wdzięczny za jakieś wskazówki.

1

a dodane masz te pliki w make czy czego tam używasz żeby to było widoczne?

0

Wszystko jest, problem pojawił się dopiero w momencie, kiedy do "CpuBus.hpp" dodałem zmienne prywatne:

CPU6502 cpu;
PPU ppu;

1

PPU.hpp oraz CpuBus.hpp prawdopodobnie są w innych folderach, więc żeby dodać jeden include do drugiego bez relatywnych ścieżek prostym #include "CpuBus.hpp" obydwa foldery muszą być dodane do ścieżek kompilatora. W clangu i gcc będzie to -I a jeśli używasz VS to będzie to flaga /I (albo Configuration Properties -> C/C++ -> General -> Additional Include Directories).

2

mi to trochę wygląda właśnie na nie dodanie do make(ale to trzeba by zobacyzć jak ten twój projekt wygląda) ale chciałbym zwrócić uwagę na zależnośc cykliczną. Cpubus zawiera ppu a ppu CpuBus trochę to źle napisane.

0

@several: Wszystko jest uwzględnione w komendzie kompilacji.
Jak już mówiłem wcześniej, wszystko się kompilowało dobrze, do czasu dodania zmiennych prywatnych w "CppBus.hpp"

5

Masz rekursywnie zawierające się nagłówki:

CpuBus.hpp:

#include "PPU.hpp"

PPU.hpp:

#include "CpuBus.hpp"

I w ogóle masz zależność cykliczną w klasach:

class CpuBus
{
  PPU ppu;
};

class PPU
{ 
  CpuBus bus;
};

Takie coś nie zadziała.

0

@mlw4: Racja, dzięki :D

1 użytkowników online, w tym zalogowanych: 0, gości: 1