C++中getName函数无法正常工作,如何进行修复?
问题分析与修复方案
你的代码存在三个核心问题:
getName函数的参数是传值传递,函数内部修改的只是局部变量,外部无法获取输入的名字getName是void返回类型,无法用string Name = getName()这种方式接收返回值main函数中调用getName()时未传递参数,且Name变量未提前定义
下面提供两种可行的修复方案:
方案一:使用引用参数传递
通过引用让函数直接修改外部变量,代码如下:
#include <iostream> #include <optional> using namespace std; void myFunction(optional<string> name = nullopt) { if (name == nullopt) { cout << "I wish I knew your name!" << endl; } else { cout << "Hello " << name.value() << "!" << endl; } } // 用引用参数传递,直接修改外部变量 void getName(string& Name){ cout << "input name: " << endl; cin >> Name; } int main() { myFunction(); string Name; // 提前定义变量 getName(Name); // 传入引用 myFunction(Name); return 0; }
原理:string&表示引用,函数内部对Name的操作会直接作用于main中定义的变量,输入的名字能被外部获取。
方案二:让函数返回字符串类型
修改getName的返回类型为string,直接返回输入的名字,代码如下:
#include <iostream> #include <optional> using namespace std; void myFunction(optional<string> name = nullopt) { if (name == nullopt) { cout << "I wish I knew your name!" << endl; } else { cout << "Hello " << name.value() << "!" << endl; } } // 返回输入的字符串 string getName(){ string Name; cout << "input name: " << endl; cin >> Name; return Name; } int main() { myFunction(); string Name = getName(); // 直接接收返回值 myFunction(Name); return 0; }
原理:函数内部创建局部变量接收输入,再将其返回给调用者,main函数通过变量接收返回值即可使用输入的名字。
内容的提问来源于stack exchange,提问作者Hector Agosto
相关产品推荐
相关产品推荐

