Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/137.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ c++;将非模板特征向量作为函数参数传递并在函数中修改_C++_Parameter Passing_Eigen3 - Fatal编程技术网

C++ c++;将非模板特征向量作为函数参数传递并在函数中修改

C++ c++;将非模板特征向量作为函数参数传递并在函数中修改,c++,parameter-passing,eigen3,C++,Parameter Passing,Eigen3,我正在实现派生类的函数成员(在基类中声明为virtual)。其中一个参数是vectorXd,它是存储操作结果的位置 我读过“以特征类型为参数编写函数”(Writing Functions Taking Eigen Types as Parameters)(),他们的技巧依赖于模板化函数,将重点放在一个通用特征对象上作为可能的参数。在我的情况下,我认为它不会起作用,因为它似乎不能混合虚拟和模板 另一方面,我知道我的参数始终是VectorXd类型,我甚至可以在进入函数之前将其调整到正确的大小,以便在

我正在实现派生类的函数成员(在基类中声明为virtual)。其中一个参数是vectorXd,它是存储操作结果的位置

我读过“以特征类型为参数编写函数”(Writing Functions Taking Eigen Types as Parameters)(),他们的技巧依赖于模板化函数,将重点放在一个通用特征对象上作为可能的参数。在我的情况下,我认为它不会起作用,因为它似乎不能混合虚拟和模板

另一方面,我知道我的参数始终是VectorXd类型,我甚至可以在进入函数之前将其调整到正确的大小,以便在函数内部不需要调整大小。我正在尝试通过引用将向量作为常量传递,并使用const_cast来进行所需的修改,但仍然会出现链接错误:

错误LNK2001:未解析的外部符号“public:virtual void\uu thiscall problem::f(类方法*,类特征::矩阵常数&,类特征::矩阵常数&)”(?f@problem@@UAEXPAVmethod@@ABV$Matrix@N$0-0$00$0A@$0-0$00@Eigen@@1@Z)

这里,“problem”是基类,“f”是函数,“method”是另一个类(我的函数中也需要这种类型的对象)

在问题的定义中,我有:

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) {...};
在衍生问题的定义中,我有:

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”是我需要存储结果的位置。对如何实现这一目标有何建议?
感谢使用advanced。

如果您的基类是抽象的,请将该方法设置为
=0
,并使用纯
虚拟的

如果基类不是抽象的,则可能不需要该方法。不要将其包含在基类中

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

谢谢,我缺少“=0”。我使用派生类来实现f,但是我在调用f的函数中传递了一个指向基类的指针。