Zaprzyjaźnione klasy i funkcje

0
#include <iostream>
#include <conio.h>
#include <string>

using namespace std;

class bibliotekarz
{
    private:
        string nazwisko;
    public:
        void zmien_nr_katalogowy(void);
        friend class ksiazka;
};


class ksiazka
{
    private:
        int nr_katalogowy;
        string tytul;
        string nazwisko_autora;
        int rok_wydania;
    public:
        void wpisz(void);
        void wypisz(void);
        friend void zmien_nr_katalogowy(bibliotekarz);
};


void bibliotekarz::zmien_nr_katalogowy(void)
{
    cout<<"Podaj nowy nr katalogowy: ";
    cin>> nr_katalogowy;
    cout<< endl;
}

void ksiazka::wpisz(void)
{
    cout<<"Podaj nr katalogowy: ";
    cin>> nr_katalogowy;
    cout<<"Podaj tytul: ";
    cin>> tytul;
    cout<<"Podaj nazwisko autora: ";
    cin>> nazwisko_autora;
    cout<<"Podaj rok wydania: ";
    cin>> rok_wydania;
}

void ksiazka::wypisz(void)
{
    cout<<"Nr katalogowy:          " << nr_katalogowy << endl
        <<"Tytul:                  " << tytul << endl
        <<"Nazwisko autora:        " << nazwisko_autora << endl
        <<"Rok wydania:            " << rok_wydania << endl << endl;
}

main()
{
    
    
    getch();    
}

[Error] 'nr_katalogowy' was not declared in this scope
nie wiem jak to dokończyć , problem jest gdzie z zaprzyjaźnianiem ale nie mogę go znaleźć

0
friend void bibliotekarz::zmien_nr_katalogowy(void);

Po co w ogóle friend dla tej metody, skoro ona i tak jest publiczna? To bez sensu :>

0

O jaki nr_katalogowy chodzi ci w funkcji void bibliotekarz::zmien_nr_katalogowy(void) ?

0

znajdujący się w klasie książka

0
nobody__ napisał(a):
friend void bibliotekarz::zmien_nr_katalogowy(void);

Po co w ogóle friend dla tej metody, skoro ona i tak jest publiczna? To bez sensu :>

sorki ale znajduje się w private nr katalogu jak byś nie zobaczył

0
wexar napisał(a):

znajdujący się w klasie książka
Jakiego dokładnie obiektu klasy książka?

0

w programie miałem na myśli zrobić tak żeby z klasy bibliotekarz mógł bym zmieniać dane w klasie książka .

1
#include <iostream>
#include <conio.h>
#include <string>
 
using namespace std;
 
class bibliotekarz
{
    private:
        string nazwisko;
    public:
        void zmien_nr_katalogowy(ksiazka&); // musisz przekazać bibliotekarzowi obiekt książki + sprawdź dlaczego trzeba tutaj postawić znaczek & (referancja)
        friend class ksiazka;
};
 
 
class ksiazka
{
    private:
        int nr_katalogowy;
        string tytul;
        string nazwisko_autora;
        int rok_wydania;
    public:
        void wpisz(void);
        void wypisz(void);
        //friend void zmien_nr_katalogowy(bibliotekarz); <- niepotrzebne
};
 
 
void bibliotekarz::zmien_nr_katalogowy(ksiazka& obiekt_ksiazki)
{
    cout<<"Podaj nowy nr katalogowy: ";
    cin>> obiekt_ksiazki.nr_katalogowy;
    cout<< endl;
}
0

tfu, przyjaźń odwrotnie - friend class bibliotekarz;
to książka musi mieć przyjaźń z bibliotekarzem, czyli udostępnia mu swoje prywatne pola

0

po twoich przeróbkach i tak się kłuć i są błędy
[Error] 'ksiazka' has not been declared
[Error] prototype for 'void bibliotekarz::zmien_nr_katalogowy(ksiazka&)' does not match any in class 'bibliotekarz'
[Error] candidate is: void bibliotekarz::zmien_nr_katalogowy(int&)

0

Argumentem metody zmien_nr_katalogowy() jest referencja obiektu klasy ksiazka. Problem w tym, że kompilator jeszcze nie wie o istnieniu takiej klasy jak ksiazka, ponieważ jej definicja znajduje się poniżej definicji klasy bibliotekarz. Należy powiadomić kompilator o istnieniu klasy ksiazka odpowiednią deklaracją, bezpośrednio przed definicją klasy bibliotekarz:

class ksiazka;
0

a jak go o tym poinformować ?

0
FURYAN napisał(a):
class ksiazka;

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