我正在实现派生类的函数成员(在基类中声明为虚拟)。其中一个参数是vectorXd,它是存储操作结果的地方。
我阅读了“以特征类型作为参数的编写函数”(http://eigen.tuxfamily.org/dox/TopicFunctionTakingEigenTypes.html),他们的破解依赖于模板化函数,将通用特征对象作为可能的参数。就我而言,我认为它不会起作用,因为您似乎不能混合使用虚拟和模板。
另一方面,我知道我的参数将始终是 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' 是我需要存储结果的地方。关于如何实现这一目标的任何建议?先谢谢了。