You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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;
}

错误原因再细化下

  1. sum()返回值不匹配:原函数返回int,虽然能转成Int对象,但OOP里操作自定义类的方法,返回同类型对象才是合理的,这样能保持类的完整性。要是你非要返回int,那得把res改成int类型,或者写res = Int(A.sum(B)),但这不够优雅。
  2. main()的规范问题:void main()不是C++标准写法,会导致编译警告甚至错误;最后的cout没完成输出逻辑,还缺分号,直接卡编译;没包含头文件和处理命名空间,编译器识别不了输入输出工具。
  3. 未调用sum():原代码里只定义了res,但从来没把求和结果赋值给它,也没输出结果,所以运行后啥也看不到。

内容的提问来源于stack exchange,提问作者Sneikof

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 10:28:54