0

我正在实现派生类的函数成员(在基类中声明为虚拟)。其中一个参数是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' 是我需要存储结果的地方。关于如何实现这一目标的任何建议?先谢谢了。

4

1 回答 1

0

如果您的基类是抽象的,请将方法设置为=0and 是 pure virtual

如果基类不是抽象的,它可能不需要那个方法。不要将它包含在基类中。

如果基类不是抽象的,但您需要能够对基类的每个实例以及派生类执行该操作,则需要在基类和派生类中实现该函数。

于 2013-07-17T21:16:12.437 回答