最近,我一直在JS画布上做二维和三维分形。现在,我正在通过SDL和Eigen将我的项目移植到C++中。能够编写功能供以后使用非常重要。下面的代码是我在做一个复合函数工厂第一次尝试:从两个lambda函数返回lambda的链接器错误
std::function< Eigen::Vector3f(Eigen::Vector3f) > compose3d(std::function<
Eigen::Vector3f(Eigen::Vector3f) > a, std::function<
Eigen::Vector3f(Eigen::Vector3f) > b){
return [&](Eigen::Vector3f vec)->Eigen::Vector3f{
return b(a(vec));
};
}
目前它在连接过程中给了我一个重复的符号错误。如果此代码被删除,错误消失。我已确定此功能位于我的标头的ifndef
部分内。我知道在头文件中完全定义函数并不是最好的做法,但是希望在重构之前让事情正常工作。
总的来说,我只是想知道,如果这个问题是函数的写入错误,如果我应该在我的代码中的其他位置查找重复的定义。我知道,创建函数指针列表比创建函数列表更好,我将在解决此链接器错误后努力实现它。
对不起,如果这是可怕的,我没有写很长的C++,这是我第一次尝试lambda。
谢谢!
使函数'inline'?例如。请参阅https://stackoverflow.com/questions/5971736/c-inline-function – stijn
这与lambda无关。 – 2017-08-13 19:08:24
你不应该在头文件中定义函数,这个错误就是为什么。这不是关于“最佳实践”。 – melpomene