Witam wszystkich,
mam następujący problem. Chciałem zrobić zadanie z odc. 4 kursu obiektowego C++ Pana Zelenta, jednak w oddzielnych plikach dla każdej klasy. Niestety, nie mogę uzyskać dostępu do atrybutów klasy punkt, a do atrybutów klasy prostokąt tak, pomimo identycznego kodu (w obydwu klasach zadeklarowałem przyjaźń z użytą funkcją). Czy ktoś mógłby mi wytłumaczyć dlaczego tak się dzieje? Dodam, że po zmienieniu atrybutów na "public" wszystko działa jak powinno, więc problem na pewno leży w hermetyzacji danych.
Załączam same pliki nagłówkowe, bo myślę, że tutaj będzie widoczny ten problem.
#pragma once
#include <iostream>
#include "Punkt.h"
class Prostakat
{
int x, y, height, width;
std::string name;
public:
Prostakat(std::string = "Prostakat", int = 0, int = 0, int = 1, int = 1);
void load();
void show();
friend void hit(Punkt pkt, Prostakat p);
};
#pragma once
#include <iostream>
#include "Prostakat.h"
class Punkt
{
int x, y;
std::string name;
public:
Punkt(std::string = "Punkt", int = 0, int = 0);
void load();
void show();
friend void hit(Punkt pkt, Prostakat p);
};
Tak wyglądają klasy, a w następującej funkcji nie mogę się odwołać do atrybutów punktu:
void hit(Punkt pkt, Prostakat p)
{
if ((pkt.x >= p.x) && (pkt.x <= p.x + p.width) && (pkt.y >= p.y) && (pkt.y <= p.y + p.height))
std::cout << "TAK!";
else
std::cout << "NIE!";
}
Z góry dziękuję za pomoc :)