重载运算符 << , os 得到一个字符串
Overloading operator << , os gets a string
所以我的代码有问题,我想重载运算符<<,所有函数都是抽象的class Employee so
friend std::ostream &operator<<(std::ostream &os, const Employee &employee) {
os<<employee.print();
return os;
}
这是一个函数打印:
virtual const std::string& print() const {
return "description: "+this->description+ " id: "+ std::to_string(this->getID()); }
Description 和 ID 只是 classEmployee
中的一个变量
它只是不起作用,我收到异常 E0317,我理解它就像打印 returns 它不是字符串。
此外,如果我将 return 类型更改为
std::basic_string<char, std::char_traits<char>, std::allocator<char>>
它神奇地工作,但我不明白为什么我不能使用标准字符串。
const std::string& print() const
此 return 是对临时字符串的引用,该字符串一创建就超出范围,因此您在函数外部使用的引用无效。
要使其在您当前使用该功能的情况下工作,您需要将其更改为:
const std::string print() const
一个更好的解决方案是也将 const
放在 return 值上,因为对 returned std::string
进行更改可以 not 影响 Employee
对象。没有理由 尝试 限制 print()
功能的未来用户,如果他们想要 std::move
returned 字符串或在其他方法。
所以,这将是一个更好的签名:
std::string print() const
正如评论中的 formerlyknownas_463035818 所暗示的那样,此功能实际上与打印没有任何关系。它 return 是对象的字符串表示形式,因此 to_string
确实是一个更合适的名称。
所以我的代码有问题,我想重载运算符<<,所有函数都是抽象的class Employee so
friend std::ostream &operator<<(std::ostream &os, const Employee &employee) {
os<<employee.print();
return os;
}
这是一个函数打印:
virtual const std::string& print() const {
return "description: "+this->description+ " id: "+ std::to_string(this->getID()); }
Description 和 ID 只是 classEmployee
中的一个变量它只是不起作用,我收到异常 E0317,我理解它就像打印 returns 它不是字符串。 此外,如果我将 return 类型更改为
std::basic_string<char, std::char_traits<char>, std::allocator<char>>
它神奇地工作,但我不明白为什么我不能使用标准字符串。
const std::string& print() const
此 return 是对临时字符串的引用,该字符串一创建就超出范围,因此您在函数外部使用的引用无效。
要使其在您当前使用该功能的情况下工作,您需要将其更改为:
const std::string print() const
一个更好的解决方案是也将 const
放在 return 值上,因为对 returned std::string
进行更改可以 not 影响 Employee
对象。没有理由 尝试 限制 print()
功能的未来用户,如果他们想要 std::move
returned 字符串或在其他方法。
所以,这将是一个更好的签名:
std::string print() const
正如评论中的 formerlyknownas_463035818 所暗示的那样,此功能实际上与打印没有任何关系。它 return 是对象的字符串表示形式,因此 to_string
确实是一个更合适的名称。