Problem z klasami zaprzyjaźnionymi

0

Cześć,

Mam problem z zaprzyjaźnionymi klasami. Otrzymuję następujący błąd:
|56|error: 'x1' was not declared in this scope|

Co go powoduje ? Wydaje mi się ,że klasy są odpowiednio zaprzyjaźnione więc dane powinny być widoczne pomiedzy nimi

#include <bits/stdc++.h>
using namespace std;

class punkt
{   public:
    int x = 0;
    int y = 5;

friend bool Sprawdz();
};

class prostokat
{   public:
    int x1 = 1;
    int x2 = 10;
    int y1 = 0;
    int y2 = 8;

    friend bool Sprawdz();
};

class wspolrzedne
{

   friend class punkt;
   friend class prostokat;

};

bool Sprawdz(int x1, int y1, int x2,
               int y2, int x, int y)
{
    if (x > x1 and x < x2 and y > y1 and y < y2)
        return true;
else
    return false;

}

int main()
{

    wspolrzedne spr;

    if (Sprawdz (x1, y1, x2, y2, x, y))

        cout << "Punkt nalezy do prostokata";

    else
        cout << "Punkt nie nalezy do prostokata";

    return 0;
}
0

Zupełnie nie rozumiem, jaki był zamiar, co chciałeś.

Ty wiesz, my nie wiemy w której linii ten error.
Deklaracja friend, rzeczywista funkcja o innym nagłówku`` - nie majaca nic wspólnego z obiektem ... chaiłeś może dobrze, ale to totalnie nie am sensu.

Przeczytaj powoli przykłady 'friend' na jakich się wzorujesz.

Wydaje mi się ,że klasy są odpowiednio zaprzyjaźnione

Klasy NIE SĄ zaprzyjażnione (nie te, co myslisz)

0

Zamysł był taki ,że są dwie klasy ( Punkt i prostokąt) które przechowują współrzedne. Chodzi o sprawdzenie czy punkt zawiera się w obszarze prostokąta a błąd mam dokladnie w tej linii:

 if (Sprawdz (x1, y1, x2, y2, x, y))
3

Radziłbym wrócić do książki z podstawami C/C++ i poczytać o zakresie ważności zmiennych.

Ty po prostu próbujesz użyć symboli z zupełnie innego zakresu. Przyjaźń nie ma tu nic do rzeczy.

Płacą mi za kodowanie w C++ +10 lat i przez ten czas friend w kodzie napisałem może 2 razy, wiec nie ma sensu się tym interesować.

Na dodatek błędów wynikających z braku zrozumienia podstaw jest więcej.
Naprawiane na szybkiego, nie sprawdziłem poprawności logiki, tylko składnie językową:

#include <iostream>

class punkt
{
public:
    int x = 0;
    int y = 5;
};

class prostokat
{
public:
    int x1 = 1;
    int x2 = 10;
    int y1 = 0;
    int y2 = 8;
};

bool Sprawdz(const prostokat& pr, const punkt& a)
{
    return a.x > pr.x1 && a.x < pr.x2 && a.y > pr.y1 && a.y < pr.y2);
}

int main()
{
     punkt  a;
     prostokat pr;

    if (Sprawdz (pr, a))
        std::cout << "Punkt nalezy do prostokata";
    else
        std::cout << "Punkt nie nalezy do prostokata";

    return 0;
}
1

albo tak:

#include <iostream>
using namespace std;

struct punkt { int x,y; };

struct prostokat { punkt p1,p2; };

bool Sprawdz(const prostokat &pr, const punkt &p) { return (pr.p1.x<=p.x)&&(p.x<=pr.p2.x)&&(pr.p1.y<=p.y)&&(p.y<=pr.p2.y); }

int main()
{
    static const char *msg[]={"nie ",""};

    cout<<"Punkt "<<msg[Sprawdz(prostokat{punkt{0,0},punkt{1,8}},punkt{0,5})]<<"nalezy do prostokata";
    return 0;
}

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0