Problem z kompilacją po zaincludowaniu

0

Hejka
Jak poradzić sobie z błędami kompilacji, gdy mam dwie klasy i w każdej jednej z nich jest metoda która korzysta z obiektu klasy drugiej?

Musiałem zrobić include "klasa1.h" w klasie drugiej i include "klasa2.h" w klasie pierwszej, problem jest taki że wywala wtedy error C0261

Żeby nie kopiować długiego kodu, zrobiłem przykładowe proste i bezsensowne klasy na których wywala te same błędy

#ifndef _ABC_H
#define _ABC_H

#include "DEF.h"

class ABC {
public:
	int x;
	ABC();
	void def(DEF obiekt);   //cos tam robi np. wypisuje y z obiektu klasy DEF
	~ABC();
};

#endif


#ifndef _DEF_H
#define _DEF_H

#include "ABC.h"

class DEF {
public:
	char y;
	DEF();
	void abc(ABC obiekt); //cos tam robi np. wypisuje x z obiektu klasy ABC
	~DEF();
};

#endif

#include <iostream>

#include "ABC.h"
#include "DEF.h"


int main() {

	ABC jeden;
	DEF dwa;
	dwa.abc(jeden);
	jeden.def(dwa);

	return 0;
}

Błędy:
1>------ Kompilacja rozpoczęta: Projekt: temp2, Konfiguracja: Debug Win32 ------
1>ABC.cpp
1>f:\moje\temp2\def.h(12): error C2061: błąd składniowy: identyfikator „ABC”
1>DEF.cpp
1>f:\moje\temp2\abc.h(12): error C2061: błąd składniowy: identyfikator „DEF”
1>Źródło.cpp
1>f:\moje\temp2\def.h(12): error C2061: błąd składniowy: identyfikator „ABC”
1>f:\moje\temp2\źródło.cpp(11): error C2660: "DEF::abc": funkcja nie przyjmuje 1 argumentów
1>f:\moje\temp2\def.h(12): note: zobacz deklarację „DEF::abc”

W rzeczywistym przypadku mam to samo, tylko na większych i sensownych klasach, w Internecie znalazłem że może być to problem z 'circular dependency', problem w tym że mam na początku każdego pliku "include guards" które mają mnie zabezpieczać przed błędami.

1
#ifndef _ABC_H
#define _ABC_H

class DEF;

class ABC {
public:
    int x;
    ABC();
    void def(DEF obiekt);   //cos tam robi np. wypisuje y z obiektu klasy DEF
    ~ABC();
};

#endif
#ifndef _DEF_H
#define _DEF_H

#include "ABC.h"

class ABC;
class DEF {
public:
    char y;
    DEF();
    void abc(ABC obiekt); //cos tam robi np. wypisuje x z obiektu klasy ABC
    ~DEF();
};

#endif

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