Search code examples
catmelstudio

Type from included header not found


I have a weird problem with my C-Code that I don't really understand.
I have two header files os_memory.h and os_mem_drivers.h.

os_memory.h

#ifndef OS_MEMORY_H_
#define OS_MEMORY_H_

#include "lcd.h"
#include "os_mem_drivers.h"

static const MemAddr gui_alloc_table_start = 0x1C8;

#endif /* OS_MEMORY_H_ */

os_mem_drivers.h

#ifndef OS_MEM_DRIVERS_H_
#define OS_MEM_DRIVERS_H_

#include "os_memory.h"
#include "defines.h"
#include "os_core.h"

typedef uint16_t MemAddr;

#endif

If I try to compile this code the compiler gives me the error unknown type name 'MemAddr'. I don't get it because I included the right header files in each .h file so there shouldn't be any error.
Is there anything that I'm missing here?

I'm using AtmelStudio 6.1 and the C language for this project.


Solution

  • You should move the definition for type MemAddr before including "os_memory.h":

    os_mem_drivers.h:

    #ifndef OS_MEM_DRIVERS_H_
    #define OS_MEM_DRIVERS_H_
    
    #include <stdint.h>
    
    typedef uint16_t MemAddr;
    
    #include "os_memory.h"
    #include "defines.h"
    #include "os_core.h"
    
    #endif
    

    But a more important problem is the circular inclusion of "os_memory.h" and "os_mem_drivers.h". Each one includes the other: include guards prevent recursive inclusion but make it difficult to understand what is really going on. You should try and fix this issue.