You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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类构造函数的实现没有被编译到目标文件中,链接时就找不到对应的函数符号。


解决步骤

  1. 修正CMakeLists.txt的编译源文件配置,将Interp.cpp加入可执行文件的编译列表:
# 修改前:add_executable(test1 main.cpp)
add_executable(test1 main.cpp Interp.cpp)

修改后重新生成构建目录、编译即可解决链接报错。

  1. 可选优化:如果构造函数仅读取输入参数值不做修改,建议将参数改为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.

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 16:54:04