在结构中返回多个值

时间:2015-02-06 19:26:11

标签: c++ struct

所以我有这个代码,但我有一些需要调整的东西...

#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;。有人能指出我正确的方向吗?

3 个答案:

答案 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)

要从结构中返回多个值,有两个主要选择:

  1. 放入结构中,返回结构。
  2. 通过引用传递一个struct作为参数,修改其中的值 参数。
  3. 首先,定义结构:

    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";
    }