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

如何重载operator>>运算符实现类内vector成员的数值输入?

问题原因及解决方案

你代码的报错是由多处语法、逻辑错误共同导致的,具体问题及修复方案如下:

  • 构造函数写法错误:你在构造函数内部定义了局部变量vector<int> numbers = {},并没有对类的私有成员numbers做初始化操作,实际上vector默认构造函数会自动生成空实例,这行冗余代码可以直接删除。
  • 输入运算符参数错误:operator>>需要修改传入的List类成员,第二个参数不能加const修饰,否则无权修改类内成员。
  • 变量命名冲突:operator>>的输入流参数命名为i,循环内又定义了同名的int循环变量i,导致循环内的i被覆盖为整型变量,无法调用输入流功能。
  • vector未扩容直接访问越界:输入长度help后,你没有给numbers vector分配对应容量,空vector直接用at(i)访问下标必然抛出越界异常,需要先调用resize(help)扩容,或者使用push_back方法新增元素。

修复后可运行代码

#include <iostream>
#include <vector>
using namespace std;
class List
{
private:
    vector<int> numbers;
public:
    // 移除冗余的错误构造代码,使用默认构造即可
    friend istream& operator>>(istream& is, List& l);
    // 补充简易输出重载方便验证结果,不需要可以删除
    friend ostream& operator<<(ostream& os, const List& l) {
        for (int num : l.numbers) {
            os << num << " ";
        }
        return os;
    }
};

istream& operator>>(istream& is, List& l)
{
    int help{ 0 };
    is >> help;
    // 先给vector扩容到对应长度
    l.numbers.resize(help);
    // 修改变量名避免冲突
    for (int idx{ 0 }; idx < help; idx++) {
        is >> l.numbers.at(idx);
    }
    return is;
}

int main()
{
    List list;
    cin >> list;
    cout << list << endl;
    return 0;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.15 02:15:04