使用Eigen非官方NNLS类编译报错:找不到指定内部方法
internal::householder_qr_inplace_update方法 问题描述
尝试使用Eigen非官方模块中的Eigen::NNLS类编写示例程序,编译时提示该类引用的internal::householder_qr_inplace_update方法不存在。
示例代码
#include "Eigen/Core" #include "unsupported/Eigen/NNLS" #include <iostream> using namespace std; using namespace Eigen; int main() { auto matrix = Eigen::Matrix<double, 3, 3>{ { 1.0, 2.0, 1.0 }, { 2.0, -1.0, 1.0 }, { 3.0, 4.0, 1.0 }, }; auto b = Eigen::Vector<double, 3>{ 1.0, 2.0, 1.0 }; auto x = NNLS<Eigen::Matrix<double,3,3>>(matrix); auto res = x.solve(b); std::cout << res << endl; return 0; }
编译错误信息
------ Build All started: Project: testEigenUnsupportNNLS, Configuration: x64-debug ------
[1/2] Building CXX object testEigenUnsupportNNLS\CMakeFiles\testEigenUnsupportNNLS.dir\testEigenUnsupportNNLS.cpp.obj
FAILED: testEigenUnsupportNNLS/CMakeFiles/testEigenUnsupportNNLS.dir/testEigenUnsupportNNLS.cpp.obj
C:\PROGRA1\MICROS4\2022\PROFES1\VC\Tools\MSVC\14361.325\bin\Hostx64\x64\cl.exe /nologo /TP -IC:\DEV\git\cdi\testEigenUnsupportNNLS......\3rdParty\eigen\eigen-3.4.0 -IC:\DEV\git\cdi\testEigenUnsupportNNLS......\3rdParty\eigen\eigen-3.4.0\unsupported /DWIN32 /D_WINDOWS /W3 /GR /EHsc /MDd /Ob0 /Od /RTC1 -std:c++20 -ZI /showIncludes /FotestEigenUnsupportNNLS\CMakeFiles\testEigenUnsupportNNLS.dir\testEigenUnsupportNNLS.cpp.obj /FdtestEigenUnsupportNNLS\CMakeFiles\testEigenUnsupportNNLS.dir\ /FS -c C:\DEV\git\cdi\testEigenUnsupportNNLS\testEigenUnsupportNNLS\testEigenUnsupportNNLS.cpp
C:\DEV\3rdParty\eigen\eigen-3.4.0\unsupported\Eigen\NNLS(345): error C2039: 'householder_qr_inplace_update': is not a member of 'Eigen::internal'
C:\DEV\3rdParty\eigen\eigen-3.4.0\Eigen\src\QR\CompleteOrthogonalDecomposition.h(593): note: see declaration of 'Eigen::internal'
C:\DEV\3rdParty\eigen\eigen-3.4.0\unsupported\Eigen\NNLS(357): error C2039: 'householder_qr_inplace_update': is not a member of 'Eigen::internal'
C:\DEV\3rdParty\eigen\eigen-3.4.0\Eigen\src\QR\CompleteOrthogonalDecomposition.h(593): note: see declaration of 'Eigen::internal'
ninja: build stopped: subcommand failed.Build All failed.
问题根源
NNLS类于2022年3月新增至Eigen非官方模块,当前使用的Eigen 3.4.0版本发布于2021年7月,版本过旧,不包含internal::householder_qr_inplace_update方法以及NNLS类的完整实现。
内容的提问来源于stack exchange,提问作者user2147873

