нет возврата в классе друга

Предупреждение генерируется ostream & operator<<(ostream &os, A &A0) функция.

class A
{
public:
friend ostream & operator<<(ostream &os, A &A0);
A& operator=(string strSlot_);
A& operator+(string strSlot_);
A& operator+(const A &B);
A& operator=(const A &B);
string slotReturn();
A(string strSlot_);
A(const A &object);
void slotChange();
void sCout();
~A();
A();
private:
string strSlot;
int n;
};ostream & operator<<(ostream &os, A &A0)
{
os << "strSlot = \"" << A0.slotReturn() << "\"" << endl;
}

string A::slotReturn()
{
return strSlot;
}

Вопрос в том, что он должен вернуть? *this не похоже на работу (потому что это friend?). (Это всего лишь предупреждение, но все же, я просто хочу знать.)

Кроме того, почему я не могу пройти A &A0 как const (в этом случае ошибка: «передача« const A »в качестве аргумента« this »функции std :: string A :: slotReturn ()« отбрасывает квалификаторы »)?

1

Решение

Вам нужно вернуть std::ostream& сам:

ostream & operator<<(ostream &os, A &A0)
{
return  os << "strSlot = \"" << A0.slotReturn() << "\"" << endl;
}

Кроме того, терминология немного отличается. Там нет «класс друга». std::ostream& operator<< друг здесь Но ему даже не нужно быть другом, потому что он просто вызывает функцию-член A, Таким образом, вы можете удалить объявление друга.

Вы, вероятно, также должны сделать slotReturn() const метод:

string slotReturn() const;
//            ^ const method

и изменить ostream& operator<< взять константную ссылку:

ostream & operator<<(ostream& os, const A& A0) { .... }

Это позволит вам распечатать временные данные:

std::cout << A("I am a temporary!") << "\n";
5

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector