C++类中sum函数无法运行求助及错误解析
你的OOP代码问题梳理与修复方案
嘿,刚入门OOP踩点坑太正常了,我帮你拆解下代码里的几个问题,还有对应的修复方法:
首先看核心问题:sum()函数的设计与使用
你写的sum()函数返回的是int类型,但你原本想把结果存在Int类型的res对象里——虽然你的类有Int(int n)构造函数能隐式转换,但这不符合OOP封装的思路,而且你在main里根本没调用sum()并把结果赋值给res,这也是看不到求和结果的关键原因之一。
然后是main()里的一堆小问题
- C++标准里
main()的返回类型必须是int,不能用void,有些编译器可能放过,但这是不规范的写法。 - 最后那条
cout语句烂尾了:既没输出求和结果,还缺了分号,直接导致语法错误。 - 你没包含
<iostream>头文件,也没加std::前缀(比如std::cout)或者声明using namespace std;,编译器根本找不到cout和cin这俩家伙。
还有个可选的优化点
虽然用sum()函数没问题,但C++里更符合直觉的写法是重载+运算符,这样你就能像用普通整数那样写A + B,而不是A.sum(B)。
修复后的完整代码
#include <iostream> using namespace std; class Int { private: int num; public: // 无参构造(用初始化列表更规范) Int() : num(0) {} // 带参构造 Int(int n) : num(n) {} // 获取数值(加const表示不修改对象,更安全) int getValue() const { return num; } // 修复sum函数:返回Int对象,符合类设计 Int sum(const Int& n) const { return Int(num + n.getValue()); } // 推荐:重载+运算符,用法更自然 Int operator+(const Int& n) const { return Int(num + n.num); // 成员函数可直接访问同类对象的私有成员 } }; // 标准main函数 int main() { short a, b; cout << "Enter 2 numbers: "; cin >> a >> b; Int A(a), B(b), res; // 方式1:用修复后的sum函数 res = A.sum(B); cout << A.getValue() << " + " << B.getValue() << " = " << res.getValue() << endl; // 方式2:用重载的+运算符(更推荐) res = A + B; cout << A.getValue() << " + " << B.getValue() << " = " << res.getValue() << endl; return 0; }
错误原因再细化下
sum()返回值不匹配:原函数返回int,虽然能转成Int对象,但OOP里操作自定义类的方法,返回同类型对象才是合理的,这样能保持类的完整性。要是你非要返回int,那得把res改成int类型,或者写res = Int(A.sum(B)),但这不够优雅。main()的规范问题:void main()不是C++标准写法,会导致编译警告甚至错误;最后的cout没完成输出逻辑,还缺分号,直接卡编译;没包含头文件和处理命名空间,编译器识别不了输入输出工具。- 未调用
sum():原代码里只定义了res,但从来没把求和结果赋值给它,也没输出结果,所以运行后啥也看不到。
内容的提问来源于stack exchange,提问作者Sneikof
相关产品推荐
相关产品推荐

