函数不保存到结构中
Function not saving to 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&
,您将通过引用传递实参,函数内部的修改将反映在原始对象中。
一般来说,在C++
中,如果你需要修改函数参数,你应该通过引用传递它们,而不是值。
你所发布的原因不做你所期望的是因为你通过值传递something
。本质上,film1
被复制到something
中,然后修改该副本,然后在函数结束时销毁该副本。film1
永远不会被触及。
您可以通过引用传递来解决这个问题,但是,如果getInfo
的目标是填充MovieData
,为什么不返回它而不是修改您的输入参数呢?它使函数的签名更加直观。例如:
MovieData 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;
return something;
}
然后在main中,可以
MovieData film1 = getInfo();
showInfo(film1);
通过这种方式,没有人可以将已经填充的MovieData
传递到您的函数中并使其遭到破坏。
您正在通过值将MovieData
传递给getInfo
,因此您正在更改函数内的本地副本,原始变量看不到更改。
您可以通过引用(MovieData&
)来修复它,但更习惯的c++方法是使用返回类型:
MovieData 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;
return something;
}
离题:如果可以的话,最好避免使用像film1
这样的全局变量。在本例中,您可以在main
函数中定义变量:
int main() {
MovieData film = getInfo();
}
相关文章:
- 我们可以将数据永久保存为数据结构吗?
- 将内部带有矢量的结构保存/读取到二进制文件中
- C++,您能否设计一种数据结构,将指针保存在连续内存中并且不会使它们失效?
- 将结构向量保存到文件中,并从C++文件中读取结构向量
- 如何在Qt中使用QDataStream将自定义结构保存/加载到二进制文件中?
- 在 Visual Studio 中调试时,是否可以将一些 C/C++ 结构内容保存到磁盘?
- 为什么添加析构函数(甚至是空的)会破坏我的结构,该结构使用 ref 转发和折叠来保存 ref 或值的副本?
- 如何在级别上打印树,给定一个结构,该结构保存节点的值及其父节点的值,对于树中的每个节点
- 指向结构变量的指针未保存到eeprom
- 什么可以用来在 C++ 中保存图形等结构(Python pickle 等效物)
- 使用结构保存用户C++输入的信息
- 如何从 GIFLIB 保存图像结构中获取 RGB 颜色数据
- 如何将文本文件保存到C 中的字符串结构
- 从保存变量数据类型的数据结构中检索值,而不指定返回类型
- 将结构保存在二进制文件中,仅在C 中读取值
- 将带有指针数组的结构保存到文件中
- C 将字符串从结构保存到文本文件中
- 将包含数组数据成员的结构保存到文件
- 将matlab中的libsvm模型结构保存到可以用C++读取的.model文件中
- 将数据结构c++保存到磁盘