繁体   English   中英

在结构中返回多个值

[英]Returning multiple values in a 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);
}

我想知道为什么我的return语句没有返回值3? 还可以说我想返回结构的多个值。 我如何归还“杰梅因,计算机科学(2)”之类的东西。 谁能指出我正确的方向?

你怎么知道这没有什么回报......

yearToString(students[1]);

......当你没有做任何回报的事情? 你的意思是把它分配给某事吗?

std::string yrStr = yearToString(students[1]);
std::cout << yrStr << std::endl; // prints 3

您不以任何方式使用返回的值。 将代码更改为:

cout << yearToString(students[1]) << endl;

按预期打印3。

您似乎将表示内存中数据的struct与呈现给用户的格式化字符串混合在一起。 您可能想要返回的似乎是后者。 在这种情况下,您需要做的就是格式化结构:

ostringstream ostr;
ostr << s.name << ", " << s.major << " (" << s.year << ")";
return ostr.str();

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

  1. 放入结构中,返回结构。
  2. 通过引用将结构作为参数传递,修改参数中的值。

首先,定义结构:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM