c ++ передает не шаблонный собственный вектор в качестве аргумента функции и модифицирует его в функции

Я реализую функцию-член производного класса (объявлен как виртуальный в базовом классе). Одним из аргументов является vectorXd, и именно там будет храниться результат операции.

Я прочитал «Написание функций, принимающих собственные типы в качестве параметров» (http://eigen.tuxfamily.org/dox/TopicFunctionTakingEigenTypes.html) и их взлом зависит от шаблонных функций, фокусируясь на общем собственном объекте в качестве возможного параметра. В моем случае я не думаю, что это сработает, потому что кажется, что вы не можете смешивать виртуальные и шаблоны.

С другой стороны, я знаю, что мой аргумент всегда будет иметь тип VectorXd, и я даже могу изменить его размер до нужного размера, прежде чем перейти в функцию, так что изменение размера внутри функции не требуется. Я пытаюсь передать вектор по ссылке как const и использовать const_cast, чтобы иметь возможность вносить необходимые изменения, но я все еще получаю ошибку компоновки:

ошибка LNK2001: неразрешенный внешний символ «public: virtual void __thiscall problem :: f (метод класса *, класс Eigen :: Matrix const &, класс 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’ — это место, где мне нужно сохранить результат. Любые предложения о том, как этого добиться?
Заранее спасибо.

0

Решение

Если ваш базовый класс абстрактный, установите метод на =0 и быть чистым virtual,

Если базовый класс не является абстрактным, ему может не понадобиться этот метод. Не включайте его в базовый класс.

Если базовый класс не является абстрактным, но вы должны иметь возможность выполнять эту операцию для каждого экземпляра базового класса, а также для производного, вам необходимо реализовать функцию в базовом классе, а также в производном.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]