朋友类中的no return语句

no return statement in friend class

本文关键字:return 语句 no 朋友      更新时间:2023-10-16

警告由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作为常量传递(在这种情况下,错误是:"将'constA'作为'std::string a::slotReturn()'的'this'参数传递会丢弃限定符")?

您需要返回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

并修改CCD_ 10以采用常量引用:

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

这将允许您打印临时文件:

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