VS2015中C++含function的代码无法运行问题及语法解析求助
关于C++代码在VS2015中运行失败的问题解析
嘿,我来帮你搞定这个问题!先说说为啥你的代码在VS2015里跑不起来,再给你拆解那行关键代码~
代码运行失败的原因
你的代码跑不起来主要是两个小问题:
- 缺少必要的头文件:
std::function这个函数包装器是在<functional>头文件里定义的,而std::cout、std::endl这些输入输出工具在<iostream>头文件里。VS2015不会自动帮你包含这些标准库头文件,必须手动引入。 - 未指定标准库命名空间:代码里直接用了
function、cout、endl,但这些都是C++标准库的成员,属于std命名空间下。要么给这些标识符加上std::前缀,要么用using namespace std;来简化写法(小示例里没问题,大型项目更推荐前者)。
解析int Func(function<int(int)> F, int x)这一行
这行是Func函数的声明,我给你拆解开讲:
int:说明这个函数执行完会返回一个整数。Func:就是这个函数的名字啦。function<int(int)> F:这里的function其实是std::function,它是C++11引入的通用函数包装器——简单说就是它能把任何符合特定签名的可调用对象(比如普通函数、lambda表达式、仿函数)装起来。function<int(int)>的意思是:这个包装器只能装「接受一个int类型参数、返回值也是int类型」的可调用对象,F就是这个包装器的实例,作为Func的第一个参数传入。int x:Func的第二个参数,就是一个普通的整数。
说白了,Func的作用就是:你给它一个符合int(int)规则的函数,再给它一个整数x,它会先调用这个函数得到结果,然后把结果平方再加1返回给你。
修正后的可运行代码
我把代码修正好了,你可以直接在VS2015里运行:
#include <iostream> #include <functional> using namespace std; int Func(function<int(int)> F, int x) { return F(x) * F(x) + 1; } int G(int x) { return x + 1; } int main(int argc, const char * argv[]) { cout << "Func(G, 5) = " << Func(G, 5) << endl; return 0; }
要是你不想用using namespace std;,把代码里的function改成std::function,cout改成std::cout,endl改成std::endl就行,效果是一样的。
内容的提问来源于stack exchange,提问作者HG9
相关产品推荐
相关产品推荐

