Making my own toString() method on c++ struct
我习惯在类中自己的对象上使用Java toString()方法,但是我不确定以下代码在哪里出问题:
1 2 3 4 5 6 7 8 9 10 11 | struct Student { std::string name; int age; double finalGrade; std::string toString() { return"Name:" + name +" Age:" + age +" Final Grade:" + finalGrade; } }; |
我才刚刚开始学习c ++,所以任何建议都将不胜感激
您无法像向Java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | #include <string> struct Student { std::string name; int age; double finalGrade; std::string toString() { return"Name:" + name + " Age:" + std::to_string(age) + " Final Grade:" + std::to_string(finalGrade); } }; |
编辑:尽管此答案解释了为什么您尝试的方法不起作用,但另一个答案的解决方案是首选方法。
与Java相反,C ++不提供预定义的" toString"方法,该方法在每次请求对象的字符串表示形式时都会隐式调用。因此,然后必须显式调用
但是,在C ++中,可以通过覆盖流的
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | struct Student { std::string name; int age; double finalGrade; std::string toString() const; }; ostream& operator << (ostream &os, const Student &s) { return (os <<"Name:" << s.name <<" Age:" << s.age <<" Final Grade:" << s.finalGrade << std::endl); } std::string Student::toString() const { stringstream ss; ss << (*this); return ss.str(); } int main() { Student stud {"john baker", 25, 1.2 }; std::cout <<"stud directly:" << stud << endl; std::string studStr = stud.toString(); std::cout <<"stud toString:" << studStr << endl; } |
您不能将int添加到std :: string中,因为
最好的解决方案是使用字符串流:
1 2 3 4 5 6 7 8 9 | #include <sstream> std::string toString() { std::ostringstream strout; strout<<"Name:" << name <<" Age:" << age <<" Final Grade:" << finalGrade; return strout.str(); } |
您不能仅将
1 2 3 4 5 | std::string toString() { return"Name:" + name +" Age:" + std::to_string(age) +" Final Grade:" + std::to_string(finalGrade); } |