Eigen::VectorXd作构造参数编译时提示需要MatrixXd类型报错问题
问题原因
这个报错本质是链接阶段符号缺失,而非Eigen类型不匹配:你在报错中看到的Eigen::Matrix<double, -1, 1, 0, -1, 1>就是Eigen::VectorXd的底层定义别名,Eigen所有的向量类型本质都是固定行列数的Matrix模板实例,不存在类型匹配错误。
出现该错误的核心原因是你的CMake配置遗漏了源文件:CMakeLists.txt的add_executable配置仅添加了main.cpp,没有将Interp.cpp加入编译列表,导致Interp类构造函数的实现没有被编译到目标文件中,链接时就找不到对应的函数符号。
解决步骤
- 修正
CMakeLists.txt的编译源文件配置,将Interp.cpp加入可执行文件的编译列表:
# 修改前:add_executable(test1 main.cpp) add_executable(test1 main.cpp Interp.cpp)
修改后重新生成构建目录、编译即可解决链接报错。
- 可选优化:如果构造函数仅读取输入参数值不做修改,建议将参数改为
const左值引用,既可以避免意外修改外部输入,也支持传入临时Eigen向量对象:
// Interp.hpp 声明修改 Interp(const Eigen::VectorXd &xData, const Eigen::VectorXd &zData, const Eigen::VectorXd &dzData); // Interp.cpp 实现同步修改 Interp::Interp(const Eigen::VectorXd &xData, const Eigen::VectorXd &zData, const Eigen::VectorXd &dzData){ this->xData = xData; this->zData = zData; this->dzData = dzData; this->xPoints.resize(xData.size()-1,2); }
内容的提问来源于stack exchange,提问作者J.V.
相关产品推荐
相关产品推荐

