Cześć, mam problem, piszę grę i utknąłem troche, na tym żę nie moge zaprzyjaźnić dwóch klas które znajdują się w odrębnych plikach header. (Dokładniej na przykład jak pobierałem wielkość ekranu to musze zrobić to w prawie każdej klasie i po co mi tyle zmiennych przechowujących rozmiar okna jak mogę to zrobić raz i z tego korzystać) , nie będę umieszczał kodu gry bo nie sądze żę komus chce się analizować 600 lini kodu, umieszczę mały dydaktyczny przykład samej idei tego co chciałem zrobić. To samo tyczy się, dziedziczenia jak to zrobić gdy klasy są w dwóch odrębnych plikach.
#include <iostream>
#include "klasa.h"
#include "zapklasa.h"
using namespace std;
int main(void)
{
Klasa k;
Zapklasa z;
k.wyswietl();
z.zmien_tajnego_inta(k);
}
class Klasa
{
int tajny_int;
public:
Klasa(int=1);
void wyswietl();
friend class Zapklasa;
};
#include "klasa.h"
class Zapklasa
{
public:
void zmien_tajnego_inta(Klasa &k);
};
#include <iostream>
#include "zapklasa.h"
void Zapklasa::zmien_tajnego_inta(Klasa &k)
{
k.tajny_int=0;
std::cout<<"TWOJ TAJNY TERAZ TO: "<<k.tajny_int;
}
#include <iostream>
#include "klasa.h"
Klasa::Klasa(int bardzo_tajny_int)
{
tajny_int=bardzo_tajny_int;
}
void Klasa::wyswietl()
{
std::cout<<"TWOJ TAJNY INT: "<<tajny_int;
}
EDIT:
Zapomnaiałem dodać co wypluwa kompilator:
||=== Build: Debug in Przyjazn_klas_dwa_pliki (compiler: GNU GCC Compiler) ===|
/home/metrobot/Documents/cppo/Przyjazn_klas_dwa_pliki/zapklasa.cpp||In member function ‘void Zapklasa::zmien_tajnego_inta(Klasa&)’:|
/home/metrobot/Documents/cppo/Przyjazn_klas_dwa_pliki/zapklasa.cpp|6|error: invalid use of incomplete type ‘class Klasa’|
/home/metrobot/Documents/cppo/Przyjazn_klas_dwa_pliki/zapklasa.h|1|error: forward declaration of ‘class Klasa’|
/home/metrobot/Documents/cppo/Przyjazn_klas_dwa_pliki/zapklasa.cpp|7|error: invalid use of incomplete type ‘class Klasa’|
/home/metrobot/Documents/cppo/Przyjazn_klas_dwa_pliki/zapklasa.h|1|error: forward declaration of ‘class Klasa’|
||=== Build failed: 4 error(s), 0 warning(s) (0 minute(s), 0 second(s)) ===|