朋友类中的no return语句
no return statement in friend class
警告由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";
相关文章:
- 无法理解此 return 语句的功能,没有它就会发生运行时错误
- 错误:调用 .. at return 语句时没有匹配函数
- C++:我应该在 return 语句中显式使用 std::move() 来强制移动吗?
- 编译器说这个函数必须返回一个值,但我已经有一个 return 语句
- 如果 return 语句在带括号的循环中,错误可能会到达非 void 函数的末尾,但不会显示在没有括号的循环的情况下
- return 语句,该语句调用在返回 void 的函数中返回 void 的函数
- C++11 是否保证 return 语句中的局部变量将被移动而不是复制?
- return语句中的C++constexpr函数
- 用return语句结束析构函数安全吗
- return 语句将右值引用绑定到左值
- 朋友类中的no return语句
- return 语句是否阻止递归堆栈继续
- 复制 ELISION:在 return 语句中使用三元表达式时未调用移动构造函数
- cython return 语句给出了一个内置方法而不是整数
- 返回 std::string 的函数在没有 return 语句的情况下崩溃,这与返回 int 而不返回语句的函数不同
- return 语句后跟初始值设定项列表
- C++:return 语句行为怪异
- 在多个return语句的情况下,返回时带有“std::move”明智
- void函数末尾的return语句为空是否有原因
- 错误:函数中的return语句没有值,返回“void*”[-fpermission]