c++ - 功能不保存到结构

标签 c++ function structure

也许我已经筋疲力尽了,但我无法弄清楚为什么每次运行这段代码时,getInfo 函数都不会将 cin 数据写入 MovieData 结构。

#include <iostream>
#include <string>
using namespace std;

struct MovieData {
    string Title, Director, Year_Released, RunningTime;
};

MovieData film1;
MovieData film2;

void getInfo(MovieData something)
{
    cout << "Please enter...\n";
    cout << "Title: ";
    cin >> something.Title;
    cout << "Director: ";
    cin >> something.Director;
    cout << "Year Released: ";
    cin >> something.Year_Released;
    cout << "Running Time: ";
    cin >> something.RunningTime;
}

void showInfo(MovieData something1)
{
    cout << something1.Title << endl;
    cout << something1.Director << endl;
    cout << something1.Year_Released << endl;
    cout << something1.RunningTime << endl;
    cin.get();
    cin.get();
}



int main()
{
    getInfo(film1);
    showInfo(film1);
    cin.get();
    cin.get();
    return 0;
}

我不知道这是否是某种全局/本地问题,它似乎只有在我手动让主函数中的每个获取信息行时才有效。

最佳答案

如果将 getInfo 的声明更改为

void getInfo(MovieData& something)

(注意添加的 &)它应该可以工作。问题是您正在按值传递 something 并且您想通过引用传递它。

当您使用当前声明调用 getInfo 时,它获取的 something 只是您传入的参数的拷贝。该拷贝由函数修改,但原始对象保持不变。通过将参数类型更改为 MovieData&,您将通过引用传递参数,并且函数内部的修改将反射(reflect)在原始对象中。

一般来说,在 C++ 中,如果您需要修改函数参数,您应该通过引用而不是值来传递它们。

关于c++ - 功能不保存到结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31552369/

相关文章:

c++ - 结构数组初始化

c++ - 如何在 C++ 中打印通用 map

python - 跳过 "return None"可以吗?

java - Java中的树实现(根, parent 和 child )

c - 我无法用 C 语言在文本文件中写入结构

Javascript 函数 - 通过引用复制,但是这里发生了什么?

c++ - 关于使用用户定义方法扩展 C++ STL 容器的更好方法的建议

c++ - 是否有 "simple"方法让 ld 输出 demangle 函数名称?

android - 如果 Android NDK 应用程序加载多个共享的 C++ STL 实现,会有什么行为?

python - 如何定义一个检查DNA子串的函数?