如何修复自定义函数的打印输出异常问题?
如何修复自定义函数的打印输出异常问题?
嘿,我来帮你捋捋问题出在哪哈!你现在遇到的情况是因为几个小误区导致的,咱们一步步来改:
首先,你直接写 std::cout << function; 的时候,C++ 会把函数名当成函数指针来处理,而 cout 打印非空函数指针的时候,默认会输出 1(因为指针非空,转成布尔值就是 true,也就是1),这肯定不是你想要的结果。
再看你的函数本身,还有两个问题:
- 你的
function是void类型,也就是没有返回值,就算你调用它,也没法直接拿到里面的"John"; - 而且参数里的
std::string people是传值传递,你在函数里给people赋值"John",改的只是函数内部的局部变量,外面根本拿不到这个值。
那怎么改呢?给你两种常见的解决办法:
方法一:让函数返回字符串
把函数改成返回 std::string 类型,直接返回目标字符串,然后调用函数来打印:
#include <iostream> #include <string> // 注意要加这个头文件,不然std::string可能会报错 std::string function(); // 修改函数声明 int main(){ std::cout << function(); // 这里要调用函数,记得加括号! return 0; } std::string function(){ return "John"; // 直接返回我们要的字符串 }
方法二:用引用传递参数
如果你不想修改函数的返回类型,可以用引用传递,让函数直接修改外部的变量,之后打印这个变量就行:
#include <iostream> #include <string> void function(std::string& people); // 参数改成引用,加个&符号 int main(){ std::string name; function(name); // 把name传进去,函数会直接修改它 std::cout << name; // 打印修改后的name return 0; } void function(std::string& people){ people = "John"; // 现在修改的是外部传入的变量本身 }
最后再划个重点:你之前的核心问题一是没正确调用函数(直接写函数名不是调用,调用必须加括号 function()),二是函数的设计没法把内部的字符串传递出来。上面两种方法都能解决你的问题,第一种更直接,适合这种简单返回值的场景~
备注:内容来源于stack exchange,提问作者NAYbabal
相关产品推荐
相关产品推荐

