[C++] Funkcje zaprzyjaźnione będące metodami innych klas
Ostatnio zmodyfikowano 2015-07-26 23:08
Roofy5 Temat założony przez niniejszego użytkownika |
[C++] Funkcje zaprzyjaźnione będące metodami innych klas » 2015-07-25 18:09:12 Mam taki oto projekcik: #include <allegro.h>
class CPole; class CPlansza { private: BITMAP * bufor; public: CPlansza( int x, int y ); ~CPlansza(); void rysuj( CPole & ); };
#include <allegro.h>
class CPlansza; class CPole { private: int pozX; int pozY; int wysokosc; int szerokosc; BITMAP * image; public: static int ilosc; CPole( char *, int = 0, int = 0 ); ~CPole(); friend void CPlansza::rysuj( CPole & ); };
Teraz chcę tą zaprzyjaźnioną funkcję zdefiniować w pliku "Plansza.cpp" #include "Plansza.h"
void CPlansza::rysuj( CPole & obiekt ) { obiekt.pozX++; }
Problemem jest to iż otrzymuje komunikat że ta zawartość jest prywatna. Wiem że jeżeli deklaruję funkcję zaprzyjaźnioną, to ciało klasy, w której ma znajdować się definicja tej funkcji, powinno znajdować się "ponad" tą deklaracją. I teraz mam problem jak pogodzić to w dwóch plikach... |
|
DejaVu |
» 2015-07-26 17:46:07 Klasa, która ma prywatne metody musi określić kto może manipulować składowymi prywatnymi. Czyli: class B { public: void metodaB(); }; class A { private: void metodaA(); friend void B::metodaB(); };
void A::metodaA() { }
void B::metodaB() { A a; a.metodaA(); }
int main() { B b; b.metodaB(); return 0; }
|
|
Roofy5 Temat założony przez niniejszego użytkownika |
» 2015-07-26 19:50:38 Mam to napisane w taki sposób jak mówisz - w deklaracji jest odniesienie do innej klasy - problemem jest tylko to, jak te pliki teraz połączyć ze sobą ;) |
|
DejaVu |
» 2015-07-26 23:08:16 Z tego wynika, że Twój temat obecnie nie dotyczy już zaprzyjaźniania metod między klasami. Twój obecny problem to dzielenie kodu na kilka plików źródłowych. W skrócie: Jeżeli klasa A zależy od klasy B, to plik zawierający klasę A powinien mieć include do pliku, zawierającego klasę B. Czyli jeżeli klasa Plansza zależy od klasy Pole, to plik zawierający klasę Plansza powinien zawierać include do pliku, który zawiera klasę Pole. |
|
« 1 » |