【发布时间】:2013-07-16 15:02:38
【问题描述】:
我正在实现派生类的函数成员(在基类中声明为虚拟)。其中一个参数是 vectorXd,它是存储操作结果的位置。
我阅读了“以特征类型为参数编写函数”(http://eigen.tuxfamily.org/dox/TopicFunctionTakingEigenTypes.html),他们的 hack 依赖于模板函数,将通用 Eigen 对象作为可能的参数。就我而言,我认为它不会起作用,因为您似乎无法混合使用虚拟和模板。
另一方面,我知道我的参数将始终是 VectorXd 类型,我什至可以在进入函数之前将其调整到正确的大小,这样就无需在函数内部调整大小。我正在尝试通过引用将向量作为 const 传递并使用 const_cast 进行所需修改的方法,但仍然出现链接错误:
错误 LNK2001: 无法解析的外部符号“public: virtual void __thiscall problem::f(class method *,class Eigen::Matrix const &,class Eigen::Matrix const &)” (?f@problem@@UAEXPAVmethod@ @ABV?$Matrix@N$0?0$00$0A@$0?0$00@Eigen@@1@Z)
这里,“问题”是基类,“f”是函数,“方法”是另一个类(我的函数中也需要该类型的对象)。
在问题的定义中我有:
virtual void f(method *m, const Eigen::VectorXd &x, Eigen::VectorXd const &y);
在派生的定义中:问题我有:
void f(method *m, const Eigen::VectorXd &x, Eigen::VectorXd const &y) {...};
'y' 是我需要存储结果的地方。关于如何实现这一目标的任何建议? 提前致谢。
【问题讨论】:
标签: c++ parameter-passing eigen3