Предупреждение генерируется 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 ()« отбрасывает квалификаторы »)?
Вам нужно вернуть 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";
Других решений пока нет …