Я пытаюсь создать не-член operator<<
. Однако я хочу, чтобы оператор был доступен для двух моих классов. ОператорКак использовать функцию друга в нескольких классах
void operator<< (ClassA & a, ClassB & b)
В двух классах публичной части, я говорю:
friend void operator<< (ClassA & a, ClassB & b);
Однако, оказалось, что оператор может получить доступ к переменной-члена в CLass B
, но не может получить доступ к частной переменной члена в Class A
.
Почему?
Реальный код: В файле CPP:
void operator<< (Hand& h, Deck& d){
h.hand.push_back(d.card[0]);
sort(h.hand.begin(),h.hand.end());
d.card.erase(d.card.begin());
}
В заголовочном файле:
class Deck {
private:
vector<Card> card;
public:
friend void operator<< (Hand& , Deck&);
};
class Hand {
private:
vector<Card> hand;
public:
friend void operator<< (Hand& , Deck&);
};
И картотека не работает.
Пока вы поставите друг декларацию в обеих классах, она должна быть тонкой. Возможно, что-то не так с этими декларациями или с определением вашего оператора. Вы должны показать реальный код –
Вы уверены, что хотите << вернуть void? Вы не сможете привязать или использовать возвращаемое значение и обязательно внесите в свой код «gotchas». – milleniumbug
@milleniumbug "конечно"? Это чепуха. Это не оператор ввода потока. Вы все равно можете реализовать перегрузку вставки потока оператора без проблем, не создавая особых проблем. Тем не менее, я бы предпочел, чтобы это была неоператорная функция. – sehe