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

在main函数中调用sub函数出现‘sub’未在此作用域声明错误,如何解决?

解决C++中‘sub’ was not declared in this scope编译错误

错误原因

C++是顺序编译语言,编译器从上到下逐行处理代码。当main函数调用sub时,编译器还没读取到sub的函数定义,因此会判定该函数未声明,抛出编译错误。

两种解决方法

方法1:提前声明函数

在main函数前添加sub的函数声明,告诉编译器这个函数的存在和接口:

#include <iostream>
#include <vector>
using namespace std;

// 提前声明sub函数的签名
vector<int> sub(vector<int> big_vector);

int main()
{
    vector<int> big_vector = {5,12,4,6,7,8,9,9,31,1,1,5,76,78,8};

    vector<int> a = sub(big_vector);
    cout<<a.size();
    return 0;
}

vector<int> sub(vector<int> big_vector){
    return {big_vector.begin() + 7, big_vector.end() - 2};
}

方法2:调整函数定义顺序

直接把sub的完整定义移到main函数之前,让编译器先处理sub的定义:

#include <iostream>
#include <vector>
using namespace std;

vector<int> sub(vector<int> big_vector){
    return {big_vector.begin() + 7, big_vector.end() - 2};
}

int main()
{
    vector<int> big_vector = {5,12,4,6,7,8,9,9,31,1,1,5,76,78,8};

    vector<int> a = sub(big_vector);
    cout<<a.size();
    return 0;
}

额外优化建议

为避免拷贝整个vector(大容器场景会影响性能),可将sub的参数改为const引用:

vector<int> sub(const vector<int>& big_vector){
    return {big_vector.begin() + 7, big_vector.end() - 2};
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 13:45:23