Я реализую функцию-член производного класса (объявленного как виртуальный в базовом классе). Один из аргументов - это vectorXd, и именно в нем будет сохранен результат операции.
Я прочитал «Написание функций, принимающих собственные типы в качестве параметров» (http://eigen.tuxfamily.org/dox/TopicFunctionTakingEigenTypes.html), и их взлом полагается на шаблонные функции, фокусируясь на общем объекте Eigen в качестве возможного параметра. В моем случае я не думаю, что это сработает, потому что кажется, что нельзя смешивать виртуальный и шаблонный.
С другой стороны, я знаю, что мой аргумент всегда будет иметь тип VectorXd, и я даже могу изменить его размер до нужного размера, прежде чем переходить к функции, чтобы не изменять размер внутри функции. Я пытаюсь передать вектор по ссылке как константу и использовать const_cast, чтобы иметь возможность вносить необходимые изменения, но я все равно получаю ошибку связывания:
ошибка LNK2001: неразрешенный внешний символ "public: virtual void __thiscall проблема :: f (метод класса *, класс Eigen :: Matrix const &, class Eigen :: Matrix const &)" (? f @ проблема @@ UAEXPAVmethod @@ ABV? $ Матрица @ 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' - это место, где мне нужно сохранить результат. Любые предложения о том, как этого добиться? Заранее спасибо.