Eigen:将Matrix初始化为Identity不会编译

时间:2018-02-19 14:47:55

标签: c++ c++11 templates eigen

我有一个模板类B,它派生自模板类A。 类A有3个模板参数(以下是A.h):

#ifndef A_HEADER
#define A_HEADER

#include "Eigen/Dense"

template<typename T = double, int xsize = Eigen::Dynamic, int ysize = Eigen::Dynamic>
class A {

public:
    // Constructor, etc.
    ...
我们从课程B派生的

#ifndef B_HEADER
#define B_HEADER

#include "A.h"
#include "Eigen/Dense"

template<typename T= double, int ysize = Eigen::Dynamic>
class B : public A<T, 4, ysize> {
private:

    Eigen::Matrix<T, ysize, 4> Hj = Eigen::Matrix<T, ysize, 4>::Identity(2, 4);

public:
    // Constructor, etc.
    ...

然后在main函数中,我像这样实例化B

 B<float> b(...

我希望获取模板默认值。当我尝试在Cygwin G ++中编译它时,我没有得到任何编译错误。但是,使用Ubuntu G ++,我收到了错误

/mnt/c/Dropbox/drive/kf/src/b.h:11:68: error: declaration of ‘Eigen::Matrix<T, ysize, 4> B<T, ysize>::ysize’
     Eigen::Matrix<T, ysize, 4> Hj = Eigen::Matrix<T, ysize, 4>::Identity(2, 4);
                                                      ^
/mnt/c/Dropbox/drive/kf/src/b.h:7:38: error:  shadows template parm ‘int ysize’
 template<typename T = double, int ysize = -1>
                               ^
/mnt/c/Dropbox/drive/kf/src/b.h:11:75: error: expected unqualified-id before numeric constant
     Eigen::Matrix<T, ysize, 4> Hj = Eigen::Matrix<T, ysize, 4>::Identity(2, 4);
                                                             ^
/mnt/c/Dropbox/drive/kf/src/b.h:11:58: error: wrong number of template arguments (1, should be at least 3)
     Eigen::Matrix<T, ysize, 4> Hj = Eigen::Matrix<T, ysize, 4>::Identity(2, 4);
                                                   ^

这种模式有什么问题?

注意:将初始化移动到构造函数不会对我造成一点伤害。我只是不明白为什么Cygwin G ++编译器对此很好,但Ubuntu版本却没有。

编辑:从g++ --version

获取的编译器信息
Windows Cygwin G++ : g++ (GCC) 6.4.0
Ubuntu G++         : g++ (Ubuntu 5.4.0-6ubuntu1~16.04.6) 5.4.0 20160609

0 个答案:

没有答案