Problem` z dyrektywami - '#include nested too deeply'

Odpowiedz Nowy wątek
2015-01-10 20:56
0

Witam
Mam dwie struktury - gameData oraz food w oddzielnych plikach, posiadających "strażników nagłówków". Do obu plików dołączam dyrektywą #include sporo plików niezbędnych do działania (one także są zabezpieczone strażnikami). Tak się zdarzyło, że w strukturze gameData muszę umieścić wskaźnik do obiektu food. Kiedy do gameData dołączyłem plik "Food.h" od razu pojawiło się kilka błędów o identycznej treści:
#include nested too deeply
wszystkie wskazują na dyrektywy #include w pliku Food.h.
Podejrzewam, że popełniłem jakiś błąd w strażnikach nagłówków. Poszukałem na necie jakichś tematów podobnej treści, ale jedyne porady jakie znalazłem to sprawdzenie czy nie popełniłem literówki i czy dyrektywa #ifndef ma koniec (oznaczony dyrektywą #endif.

Plik Point.h:

#pragma once

#include "Coord.h"
#include "GameData.h"

struct point
{
   coord position;
   char c;

   point(int x = 0, int y = 0, char cn = 'o');

   void displayP(gameData& data);
};

Plik Food.h:

#pragma once

#include "Point.h"
#include "Coord.h"

struct food : public point
{
    food();
    coord randomPos();
};

Plik GameData.h:

#pragma once

#include <string>
using namespace std;

#include "Food.h"

struct gameData
{
    int score;
    string screen;
    food* f; 

    gameData() : score(0), screen(" ") {}
};

W trakcie kompilacji kompilator zapętla się "skacząc" między tymi plikami (dopiero po chwili wywala błąd). Dodam jeszcze, że przeniesienie strażnika nagłówka w Food.h przed dyrektywy dołączania plików usuwa wcześniejsze błędy, ale w pliku GameData.h nie mogę stworzyć żadnego obiektu typu food. Liczę na waszą pomoc.

edytowany 4x, ostatnio: gogolon, 2015-01-11 17:34

Pozostało 580 znaków

2015-01-10 21:08

To:

#ifndef _GAMEDATA_H_
#define _GAMEDATA_H_

ma być na samym początku pliku - zawsze.


Wykonuję programy na zamówienie, pisać na Priv.
Asm/C/C++/Pascal/Delphi/Java/C#/PHP/JS oraz inne języki.
Pokaż pozostałe 21 komentarzy
Uffff... Dzięki ;) - gogolon 2015-01-11 18:42
Niestesty... Nie mogę teraz zrobić w strukturze gameData żadnego obiektu typu food. Field ''f' has incomplete type. - gogolon 2015-01-11 18:44
Możesz tylko wskaźniki. - _13th_Dragon 2015-01-11 18:47
Możesz też wywalić tak samo #include "GameData.h" z point.h - _13th_Dragon 2015-01-11 18:52

Pozostało 580 znaków

2015-01-10 21:43
1

Jeśli to jest c++ to pisz

#pragma once

Edit// Gdybys pytał dlaczego to
Tutaj:http://en.wikipedia.org/wiki/Pragma_once
znajdziesz wyjaśnienie

edytowany 1x, ostatnio: Westen, 2015-01-10 21:46
Pokaż pozostałe 6 komentarzy
@gogolon, przecież dostałeś odnośnik wyjaśniający, ale to tak czy owak ci nie pomoże. - _13th_Dragon 2015-01-10 21:56
@Endrju, ? Ja kojarzę coś takiego z Javy, ale może coś mi się pomyliło :D - gogolon 2015-01-10 21:57
@_13th_Dragon, kiedy pisałem komentarz, linku jeszcze nie było. - gogolon 2015-01-10 21:58
@gogolon, w takim razie to ci się bardzo przyda: http://bit.ly/1I9qa8A - _13th_Dragon 2015-01-10 22:00

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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