Функция перегрузки не может достать до переменной класса
Всем привет. Проблема следующая: Мне нужно реализовать 4 бинарных оператора функции-перегрузки. Я попробовал реализовать оператор +, и вроде бы получилось, однако, не получается получить переменную в классе, и выдает следующую ошибку:
C2065: pagesLeft: необъявленный идентификатор C2065: pagesLeft: необъявленный идентификатор
Так же еще случалась похожая ошибка, где говорилось что-то о том, что не получается получить private переменную класса.
Вот объявление класса, функций и переменных:
class diary {
mutable int pagesLeft; // переменная до которой не может достать
int numOfSongs;
int numOfArtists;
int numOfAlbums;
int numOfGenres;
int numOfPages;
int numOfFiles;
int readedPages;
float Ink;
double diaryWidth;
double diaryHeight;
bool state;
int info;
string diaryName;
string diaryLan;
string diaryAuthor;
public:
friend diary operator + (diary&);
friend int operator *= (diary&, int);
diary();
diary(double, double);
diary(int);
diary(int numOfSongs,
int numOfArtists,
int numOfAlbums,
int numOfGenres,
int numOfPages);
~diary();
void operator = (bool);
int operator += (int);
int operator -= (int);
void Func(diary value);
void reset(void);
void changeSong(void);
void changeArtist(void);
void changeAlbums(void);
void changeGenres(void);
void changeState(void);
void getPages(void);
void diaryInfo(void);
void changeDiaryName(void);
void changeDiaryLan(void);
void changeDiaryAuthor(void);
int loadSongs(int);
int unloadSongs(int);
};
Вот сами перегрузки:
diary operator + (diary& readedPages) {
return diary(pagesLeft + readedPages.pagesLeft);
}
diary operator + (diary&, int readedPages) {
return diary(pagesLeft + readedPages);
}
Заголовочный файл с классом подключен. Не могу найти проблему. Пробовал еще через this->pagesLeft, ошибка исчезала, но выдавало: this может указываться только в нестатических членах-функциях, а потом прочитал, что вроде так нельзя делать( Такое чувство, что я где-то фэйлю в обращении класса, когда пишу перегрузку, но в примере который нам давали все сделано точно так же.
P.S: Насколько я знаю, та перегрузка, что я написал по сути своей унарная, но мне хотя бы с этого начать.
Ответы (1 шт):
Как только вы описываете friend — вы описываете не члены класса, а внешние (свободные) функции. Для которых нет и не может быть this, так как они вызываются без объектов.
Сделайте эти операторы членами класса (особенно типа +=).
diary operator + (const diary& readedPages) {
return diary(pagesLeft + readedPages.pagesLeft);
};
Оператор
diary operator + (diary&, int readedPages)
и в самом деле должен быть свободным, для него надо передавать первый аргумент - а вы его не передаете:
diary operator + (const diary& d, int readedPages) {
return diary(d.pagesLeft + readedPages);
}
Вот:
class diary {
mutable int pagesLeft;
int numOfSongs;
public:
diary operator + (const diary& rPages) {
return diary(pagesLeft + rPages.pagesLeft);
};
friend diary operator + (const diary& d, int readedPages);
diary() {};
diary(int) {};
};
diary operator + (const diary& d, int readedPages) {
return diary(d.pagesLeft + readedPages);
}