Siemanko. Robiąc sobie powtórzenie teorii przed Builderem, grzebiac w kodzie napotkałem mały błąd związany z przesyłaniem obiektów funkcji przez referencje. W komentarzach // w kodzie opisałem krok po kroku co robię.
Mój kod :
main
#include <iostream>
#include "przyjaciele.h"
using namespace std;
int main()
{
Punkt pkt1;
pkt1.wczytaj();
Prostokat p1;
p1.wczytaj();
p1.sedzia(&pkt1,&p1); // 3. wysylam oryginalne obiekty funkcji i ja wywoluje
return 0;
}
przyjaciele.h
#include <iostream>
using namespace std;
class Punkt
{
string nazwa;
float x,y;
public:
Punkt(string="A",float=0,float=0);
void wczytaj();
friend void sedzia();
};
class Prostokat
{
string nazwa;
float x,y,szerokosc,wysokosc;
public:
Prostokat(string="brak",float=0,float=0,float=1,float=1);
void wczytaj();
void sedzia(Punkt pkt, Prostokat p); // 1. ustawiam parametry formalne bez &
};
void sedzia() w przyjaciele.cpp
void Prostokat::sedzia(Punkt pkt, Prostokat p) // 2. tutaj także bez &
{
if ( (pkt.x>=p.x)&&(pkt.x<=p.x+p.szerokosc)
&&(pkt.y>=p.y)&&(pkt.y<=p.x+p.wysokosc) )
cout<<endl<<"Punkt "<<pkt.nazwa<<" nalezy do prostokata: "<<p.nazwa;
else
cout<<endl<<"Punkt "<<pkt.nazwa<<" lezy POZA prostokatem: "<<p.nazwa;
}
Kompilator pokazuje błąd:
In function 'int main()':
no matching function for call to 'Prostokat::sedzia(Punkt*, Prostokat*)'|
|13|note: candidate is:
|29|note: void Prostokat::sedzia(Punkt, Prostokat)|
|29|note: no known conversion for argument 1 from 'Punkt*' to 'Punkt'|
Mam wrażenie , że nie do końca rozumiem te przesyłanie obiektów przez referencje. Proszę o jakieś rady