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.