在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
相关产品推荐
相关产品推荐

