簡體   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