具体错误信息如下所示:
error C2664: “osgEarth::UID osgEarth::Util::ShaderFactory::addPreProcessorCallback(osg::Referenced *,std::function<void (std::string &,osg::Referenced *)>)”: 无法将参数 2 从“osgEarth::Util::PbrLightEffect::attach::<lambda_668fa8c27a2df71766a7729b06b6bb30>”转换为“std::function<void (std::string &,osg::Referenced *)>”
如上所示,在移植github上一个miniProjct的时候,编译后出现了上述的错误。
如图中代码所示,这是一个关于std::function和lambda的表达式,具体知识点参见:《c++11新特性之std::function和lambda表达式 - 程序喵大人的文章 - 知乎
https://zhuanlan.zhihu.com/p/137884434》
查看addPreProessorCallback函数的定义
解决方法:
发现函数有两个形参,而代码中只有一个。所以应该再添加一个形参,添加后如下所示:
添加后,错误提示消失!