funkcja zaprzyjaźniona

0

Witam

#include <iostream>

using namespace std;

    class egzaminator
    {
    protected:
          string imie, nazwisko;
          int kwota;
    public:
        egzaminator(string nazwisko_par="",string imie_par=""):nazwisko(nazwisko_par),imie(imie_par)
        {
            kwota=0;
        }

    void wyswietl()
    {
        cout<<nazwisko<<" "<<imie<<" ";
        if(kwota>0) cout<<kwota<<endl;
        else cout<<endl;
    }
    };

class studenci:public egzaminator
{
    
        float *oceny;
        int rozmiar;
    public:
        studenci(egzaminator egz_par,int rozmiar_par):egzaminator(egz_par),rozmiar(rozmiar_par)
        {
            oceny=new float[rozmiar];
            for(pom=0;pom<rozmiar;pom++)
            oceny[pom]=0;
        }

        friend void operator+(int ocena_par)
        {
            int ok=0,pom=0;
            for(pom;pom<rozmiar && ok==0;pom++)
            {
                if(oceny[pom]!=0)
                {
                    oceny[pom]=ocena_par;
                    ok=1;
                }
            }
            if(pom==n) cout<<"brak miejsc";
        }
};

Dlaczego przy linijce friend void operator+(int ocena_par) wyskakuje mi blad "|error: 'void operator+(int)' must have an argument of class or enumerated type|" Gdy usune friend to wszystko ladnie sie kompiluje...
Proszę o pomoc.

0

A wpisać friend w googlach i poczytać?

0

Nie musiałem, wystarczylo spojrzeć chodny okiem... ;D
Mam teraz nowy problem.

 


        int* operator()()
        {
            int tab2[2];
            tab2[0]=0;
            tab2[1]=0;
            int pom=0;
            for(pom;pom<rozmiar;pom++)
            {
                if(oceny[pom]>2) tab2[0]++; //liczba ocen wiekszy od 2
                if(oceny[pom]==2) tab2[1]++; //liczba ocen rownych 2
            }
            return tab2;
        }

        friend void operator+(float kwota_par,studenci stu_par)
        {
            if(*(stu_par())!=0 && *(stu_par()+1)==0)
            stu_par.kwota+=kwota_par;
        }

        studenci operator>(studenci stu_par)
        {
           // if(*(this())
            
                return *this;
        }

};

Nie mam zielonego pojecia jak za pomoca wskaznika this dostac sie do operatora ().
Proszę o pomoc

0
  1. albo if(*((*this)())) albo if(*(operator()()))
  2. nie możesz zwracać w operatorze (ani w dowolnej innej metodzie czy funkcji) adresu lokalnej tablicy.
0

Dzięki.
Nie moge zwrocic adresu lokalej tablicy bo jak wyjde z danej funkcji itp to moze zostac w to miejsce wrzucone jakis smieć? Musze przekazac w argumencie jakas zmienna globana albo zrobic z tej zmiennej lokelnej zmienna statyczna, tak?

1

Pamiętaj że statyczne zmienne nie działają przy wielowątkowości, to znaczy działają ale nie tak jak by się tego chciało :D

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