Hej,
Mam problem z plikami nagłówkowymi,
Plik: memory_sector.h
#pragma once
#include "memory_operations.h"
#define DECLARE_MEMORY_SECTOR(sector_size) \
typedef struct memory_sector { \
int l_fence; \
int buffer[sector_size]; \
int r_fence; \
} memory_sector_t;
address_status_t copy_memory(memory_sector_t *, int * destination, int * source, size_t size);
#define RAND_SECTOR_SIZE 10 + ((int)__TIME__[6] + (int)__TIME__[7]) % 11
#define INITIALIZE_MEMORY_SECTOR() DECLARE_MEMORY_SECTOR(RAND_SECTOR_SIZE)
Plik: memory_operations.h
#pragma once
#include <cstddef>
#include "memory_sector.h"
INITIALIZE_MEMORY_SECTOR();
const unsigned int FENCE_INITIALIZER = 0xCAFEBABE;
const unsigned int BUFFER_INITIALIZER = 0xAB;
typedef enum address_status {
NO_ERROR,
ADDRESS_OUT_OF_RANGE
} address_status_t;
int * get_left_fence_address(memory_sector_t *);
int * get_right_fence_address(memory_sector_t *);
size_t get_memory_buffer_size(memory_sector_t *);
void initialize_memory(memory_sector_t *);
address_status_t validate_address(memory_sector_t * memory_sector, const int * address);
address_status_t read_memory(memory_sector_t *, const int * address, int * buffer);
address_status_t write_memory(memory_sector_t *, int * address, int value);
Plik: memory_sector.cpp
#include "memory_operations.h"
#include "memory_sector.h"
#include <cstring>
address_status_t copy_memory(memory_sector_t * x, int * destination, int * source, size_t size){
if(destination==&(x->l_fence)){
memcpy(destination, source, size);
return NO_ERROR;
}
if(destination==&(x->r_fence)){
memcpy(destination, source, size);
return NO_ERROR;
}
for(int * k = &(x->l_fence)+1; k<&(x->r_fence)-1; ++k){
memcpy(destination, source, size);
if(destination==k){
return NO_ERROR;
}
}
return ADDRESS_OUT_OF_RANGE;
}
Oczywiście plik main.cpp istnieje ale nie ma nic wspólnego z tym co powoduje błąd, więc nie zaśmiecam
Problem tkwi w tym że używam składników obu plików nagłówkowych w nich nawzajem.
Zrozumiałem już że problem w tkwi w referencji cyklicznej, i że powinienem użyć pre-deklaracji, ale nijak nie jestem w stanie tego kodu poprawić by działał.
Błąd jaki wyskakuje to:
Będę bardzo wdzięczny za jakąkolwiek podpowiedź, wskazanie, cokolwiek.