所以我有这个代码,但我有一些需要调整的东西...
#include <iostream>
#include <string>
#include <sstream>
using namespace std;
struct Student {
string major;
string name;
int year;
};
string yearToString(Student s) {
string stringYear;
ostringstream convert;
convert << s.year;
stringYear = convert.str();
cout << stringYear << endl; // this prints 3
return stringYear; // this returns nothing
}
int main() {
Student* students = new Student[2];
students[0].major = "Computer Science";
students[0].name = "Jermaine";
students[0].year = 2;
students[1].major = "Biology";
students[1].name = "Kelsey";
students[1].year = 3;
yearToString(students[1]);
delete[] students;
return (0);
}
我想知道为什么我的退货声明没有返回值3?还可以说我想返回结构的多个值。我如何归还类似于#34; Jermaine,Computer Science(2)&#34;。有人能指出我正确的方向吗?
答案 0 :(得分:2)
你怎么知道这没有任何回报......
yearToString(students[1]);
...什么时候你不做任何回报?你的意思是把它分配给某事吗?
std::string yrStr = yearToString(students[1]);
std::cout << yrStr << std::endl; // prints 3
答案 1 :(得分:1)
您不以任何方式使用返回的值。将代码更改为:
cout << yearToString(students[1]) << endl;
按预期打印3个。
您似乎将表示内存中数据的struct
与呈现给用户的格式化字符串混合在一起。您可能想要返回的似乎是后者。在这种情况下,您需要做的就是格式化struct:
ostringstream ostr;
ostr << s.name << ", " << s.major << " (" << s.year << ")";
return ostr.str();
答案 2 :(得分:0)
要从结构中返回多个值,有两个主要选择:
struct Result
{
std::string student_name;
std::string course_name;
};
Result My_Function()
{
Result value;
value.student_name = "Jermaine";
value.course_name = "Biology 101";
return value;
}
void Sams_Function(Result& value)
{
value.student_name = "Jermaine";
value.course_name = "Biology 101";
}
另一种不优选的方法是通过引用传递许多变量:
void Another_Function(std::string& student_name,
std::string& course_name)
{
student_name = "Jermaine";
course_name = "Biology 101";
}